标签:style blog http color os io 文件 for ar
把api封装完,客户要求app的url能不能不变(客户之前用的php的api开发app,已经开发了很多了,所以希望不改动url)。但是这个规则要求是:xx/api.php?s=/{controller}/{action}&{parms},而我的直接就是xx/{controller}/{action} ?parms。改动web api的路由却不能包含“?”这个特殊字符。而且api.php之后都是参数,而我action之后才是参数。所以必须重写Url。
public class UrlWriter : IHttpModule { public void Init(HttpApplication context) { context.BeginRequest += new EventHandler(context_BeginRequest); } void context_BeginRequest(object sender, EventArgs e) { //获得当前页面请求管道的HttpApplication对象 HttpApplication application = sender as HttpApplication; HttpContext context = application.Context;//获得上下文对象 //string url = context.Request.Url.LocalPath;//获得URL(不包含域名和路径) string url = context.Request.Url.AbsoluteUri;//获得URL(不包含域名和路径) //api.php?s= /controller/action&name=miyu&pwd=123 ---> controller/action?parms= Regex reg1 = new Regex("/WebForm2/[A-Z0-9a-z_]+");//注意文件夹与文件名称的大小写. if (url.Contains("api.php?s=")) //这种情况是匹配根据ID值来查看某个文章的内容。 { url = url.Replace("api.php?s=", "|"); var controller = ""; var action = ""; var parms = ""; var baseurl = url.Split(‘|‘)[1]; //得到 类似于User/Login&.... 或者 User/Login .... if (baseurl.Contains("&")) { var cap = baseurl.Split(‘&‘); var ca = cap[0].Split(‘/‘); controller = ca[0]; action = ca[1]; //User/login&name=miyu&pwd=123 parms = "?"; for (int i = 1; i <= cap.Length-1; i++) { if (i < cap.Length - 1) //共有cap.length-1个参数 { parms += cap[i] + "&"; } else { parms += cap[i] ;//最后一个参数 不需要再加& } } } else { var ca = baseurl.Split(‘/‘); controller = ca[0]; action = ca[1]; } var newurl = string.Format("/api/{0}/{1}{2}", controller, action, parms); context.RewritePath(newurl); //前台的列表页就可以这样写:<a href=‘../WebForm2/<%#Eval("id")%>‘></a> } } public void Dispose() { throw new NotImplementedException(); } }
然后在web.config中加入:
<httpModules> <add name="UrlReWriter" type="AS.GroupOn.Web.UrlWriter, AS.GroupOn.Web, Version=1.0.0.0, Culture=neutral" /> </httpModules> </system.web>
Debug的时候就ok了。但发布上了iis 却404 找不到资源。因为iis将.php 识别成了一个资源文件。
最后找到方法:站点--> 属性--》主目录
点击配置:
可执行文件就是我们的C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll。 (32位选32位的)
扩展名加入 .php
取消判断确认文件是否存在 就ok了。
标签:style blog http color os io 文件 for ar
原文地址:http://www.cnblogs.com/stoneniqiu/p/3933137.html