Ada*_*kis 7 iis asp.net-mvc iis-7 asp.net-mvc-routing asp.net-mvc-3
我正在尝试支持一些遗留网址,并将它们映射到控制器操作.网址如下所示:
/~Home+Office~Note+Pads.html
Run Code Online (Sandbox Code Playgroud)
这是我的路线:
routes.MapRoute(
    "LegacyCategory",
    "{path}.html",
    new { controller = "LegacyCI", action = "Index", }
);
Run Code Online (Sandbox Code Playgroud)
这是我的控制器(开始)处理它们:
public class LegacyCIController : Controller {
    public ActionResult Index(string path) {
        if (path == "~Address+Labels") {
            return RedirectToAction("Display", "Category", new { id = "AddressLabels" });
        }       
        return RedirectToAction("Index", "Category"); 
    }
}
Run Code Online (Sandbox Code Playgroud)
如果我在LegacyCIController中设置了一个断点,并且我将我的起始页面设置为XXX.html,那么断点就会命中(并且失败了if),生活也很好.但是当我尝试将起始页面设置~Address+Labels.html为时,没有断点被击中,Chrome只是呕吐并向我显示一个页面,上面写着"哎呀,此页面似乎已被破坏".
我在我的机器上通过IIS 7运行此页面,而不是Visual Studio.
这个URL是如此格式错误,以至于普通的MVC路由甚至无法处理它,或者我做错了什么?
默认情况下,IIS 7块的URL(错误404.11)与+路径,你可以通过打开覆盖此allowDoubleEscaping在web.config:
  <system.webServer>
    <security>
      <requestFiltering allowDoubleEscaping="true">
      </requestFiltering>
    </security>
  </system.webServer>
Run Code Online (Sandbox Code Playgroud)
但是,正如IIS博客中所解释的,此选项会打开一个潜在的安全漏洞,因此在使用它时要小心:
http://blogs.iis.net/thomad/archive/2007/12/17/iis7-rejecting-urls-containing.aspx
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           2139 次  |  
        
|   最近记录:  |