把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('|')[]; //得到 类似于User/Login&.... 或者 User/Login ....
if (baseurl.Contains("&"))
{
var cap = baseurl.Split('&');
var ca = cap[].Split('/');
controller = ca[];
action = ca[];
//User/login&name=miyu&pwd=123
parms = "?";
for (int i = ; i <= cap.Length-; i++)
{
if (i < cap.Length - ) //共有cap.length-1个参数
{
parms += cap[i] + "&";
}
else
{
parms += cap[i] ;//最后一个参数 不需要再加&
}
}
}
else
{
var ca = baseurl.Split('/');
controller = ca[];
action = ca[];
} 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了。

记一次Url重写_发布之后iis 404的更多相关文章

  1. URL重写以后发布到IIS找不到页面

    1.读取必须勾选,否则无法加载资源文件(img,css等) c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll

  2. url重写后发布出错问题

    iis7 配置urlrewriter重写失效的问题 在IIS7下,如果使用微软的 URLRewriter 重写控件则需要在WEB.CONFIG中配置以下信息 第一个配置: <configSect ...

  3. 微软的坑:Url重写竟然会引起IIS内核模式缓存不工作

    万万没有想到!当初为了解决使用负载均衡时记录客户端IP地址的问题,在IIS URL Rewrite Module中增加了一条URL重写规则(详见迁入阿里云后遇到的Request.UserHostAdd ...

  4. URL重写2.1.mis

    概观 IIS URL重写2.1使Web管理员能够创建强大的规则来实现更容易让用户记住的网址,并使搜索引擎更容易找到.通过使用规则模板,重写映射,.NET提供程序和集成到IIS管理器中的其他功能,Web ...

  5. IIS8如何安装和使用URL重写工具-URL Rewrite

    下载和安装URL Rewrite IIS8默认是没有安装URL重写工具的,必须要自己下载安装. 如果IIS上默认有安装Web平台安装程序,我们可以使用平台自动安装URL Rewrite重写工具,打开I ...

  6. IIS 无法安装URL重写模块的解决办法 UrlReWrite (.NET`SQL技术交流 群号206656202)

    下载和安装URL Rewrite IIS8默认是没有安装URL重写工具的,必须要自己下载安装. 如果IIS上默认有安装Web平台安装程序,我们可以使用平台自动安装URL Rewrite重写工具,打开I ...

  7. IIS URL Rewrite(URL 重写)-使用教程

    IIS URL Rewrite(URL 重写)-使用教程 作者:vkvi 来源:千一网络(原创) 日期:2011-8-17  http://www.cftea.com/c/2011/08/9CRXOL ...

  8. IIS上发布站点后URL重写失效的解决方法

    在发布网站时URL重写有可能会失效,如果失效的话就需要您设置一下IIS:1.Windows XP系统或Windows 2003系统等使用以下方法:>打开IIS,主目录-〉配置-〉映射-〉在窗体左 ...

  9. ASP.NET MVC URL重写与优化(1)-使用Global路由表定制URL

    ASP.NET MVC URL重写与优化(1)-使用Global路由表定制URL 引言--- 在现今搜索引擎制霸天下的时代,我们不得不做一些东西来讨好爬虫,进而提示网站的排名来博得一个看得过去的流量. ...

随机推荐

  1. css例子

    6.背景图像渐变的制作body{ background:#ccc url(xxx.gif)rpeat-x或y:} 7.给一个区块加上背景#branding{ width:700px: height:2 ...

  2. CSS 浮动副作用 ,清除浮动

    参考:http://www.divcss5.com/jiqiao/j406.shtml 副作用:一般是一个盒子里使用了CSS float浮动属性,导致父级对象盒子不能被撑开,背景色不显示(如果父级不设 ...

  3. c# udp局域网通信

    udp224.0.0.1 子网上的所有系统224.0.0.2 子网上的所有路由器224.0.0.12 dhcp服务器224.0.1.1 ntp224.0.1.24 wins服务器 http://www ...

  4. SQL 使用 AND 与 OR

    1.介绍:关于AND与OR的使用是比较基础的,但是在项目中如果不注意使用的话会使查出来的数据有错误. 2.主要问题: 在未加任何AND与OR的选择是独立的,与逻辑运算一样.即: SELECT * FR ...

  5. Android Service完全解析,关于服务你所需知道的一切(上)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的A ...

  6. JSON与JAVA数据的转换

      1. List集合转换成json代码 List list = new ArrayList(); list.add( "first" ); list.add( "sec ...

  7. js 正则表达式

    //判断字符串是否为数字 function checkRate(input) { var re = /^[0-9]+.?[0-9]*$/; if (!re.test(input.rate.value) ...

  8. Dojo框架学习笔记<二>

    一.dojo/dom    该模块定义了Dojo Dom API,主要有以下几种用法:    1.dom.byId();(相当于document.getElementById())    ①最直接的用 ...

  9. 如何防止JAVA反射对单例类的攻击?

    在我的上篇随笔中,我们知道了创建单例类有以下几种方式: (1).饿汉式; (2).懒汉式(.加同步锁的懒汉式.加双重校验锁的懒汉式.防止指令重排优化的懒汉式); (3).登记式单例模式; (4).静态 ...

  10. 我与solr(六)--solr6.0配置中文分词器IK Analyzer

    转自:http://blog.csdn.net/linzhiqiang0316/article/details/51554217,表示感谢. 由于前面没有设置分词器,以至于查询的结果出入比较大,并且无 ...