asp.net mvc 没有收到带有句点的 GET 请求

Posted

技术标签:

【中文标题】asp.net mvc 没有收到带有句点的 GET 请求【英文标题】:asp.net mvc does not receive the GET request with a period in it 【发布时间】:2012-07-30 11:16:28 【问题描述】:

我正在使用 .net4.5rc 和 MVC4.0rc

下面的代码取自 MVC webapi 应用程序,但我的行为与 reular asp.net mvc 相同

我的 registerroutes 代码如下所示

 routes.IgnoreRoute("resource.axd/*pathInfo");

            routes.MapHttpRoute(
                name: "R1",
                routeTemplate: "product/id",
                defaults: new  
                                controller="Product",
                                id = RouteParameter.Optional 

                              
            );

这适用于其中没有句点的 ID。但是,当我要求产品中带有句号时,调用似乎没有到达 ASP.NET

当我按照类似帖子中的建议使用以下设置时,它在尾随 / 时有效 但是没有它就不行

总结

http://mysite.com/product/AZ0     //works
http://mysite.com/product/AZ.0/   //work with relaxedUrlToFileSystemMapping
http://mysite.com/product/AZ.0    //does not work

响应是 404,我猜这是 IIS 返回的,不涉及 ASP.NET。 当我使用上面最后一个 URL 运行 routedebugger 时,我什至没有得到 routedebugger 的东西

当存在带有模式的 URL 时,如何使 IIS 将控件传递给 ASP.NET: mysite.com/product/id,不管 id 中是否有句点。

谢谢。

【问题讨论】:

【参考方案1】:

让我自己回答这个问题。添加 URL 重写解决了这个问题。 下面添加到 web.config 中的代码告诉如果 URL 的格式为 (product/.),则使用尾随“/”重写 Url 然后它不再作为文件处理,而是处理作为常规 MVC。

  <system.webServer>
   ....   
    <rewrite>
      <rules>
        <rule name="Add trailing slash" stopProcessing="true">
          <match url="(product/.*\..*[^/])$" />
          <action type="Rewrite" url="R:1/" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>

【讨论】:

以上是关于asp.net mvc 没有收到带有句点的 GET 请求的主要内容,如果未能解决你的问题,请参考以下文章

带有 ADO .NET 的 ASP .NET MVC 会导致问题吗?

带有部分视图和 Ajax 的 ASP.NET MVC 客户端验证

ASP.NET MVC 4 模型验证

ASP.NET MVC 4 模型验证

表单帖子上的 asp.net mvc 编码

e.slice 不是带有 Kendo UI 的 ASP.NET MVC 中的函数错误