在ASP.NET mvc和IIS中,URL中的圆点导致404

 2023-02-17    364  

问题描述

我有一个要求我的URL在路径中有点的项目.例如,我可能有一个URL,例如www.example.com/people/michael.phelps

带有点的URL会生成404.我的路由很好.如果我在没有点的情况下传递Michaelphelps,那么一切都可以.如果添加点,我会收到404错误.示例网站与IIS8 Express在Windows 7上运行. URLSCAN没有运行.

在ASP.NET mvc和IIS中,URL中的圆点导致404

我尝试将以下内容添加到我的web.config:

<security>
  <requestFiltering allowDoubleEscaping="true"/>
</security>

不幸的是,这没有区别.我只是收到404.0找不到错误.

这是一个MVC4项目,但我认为这没有相关.我的路由正常工作,我期望的参数在那里,直到它们包括一个点.

我需要配置什么,以便我的URL中有点?

推荐答案

我通过编辑网站的HTTP处理程序来获得此功能.为了我的需求,这效果很好,可以解决我的问题.

我只是添加了一个新的HTTP处理程序,该处理程序寻找特定的路径标准.如果请求匹配,则将其正确发送到.NET进行处理.我对这种解决方案更加满意,比Urlrewrite黑客攻击或启用Rammfar.

例如,要有.net进程url www.example.com/people/michael.phelps 在system.webServer / handlers元素中添加以下行:

<add name="ApiURIs-ISAPI-Integrated-4.0"
     path="/people/*"
     verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS"
     type="System.Web.Handlers.TransferRequestHandler"
     preCondition="integratedMode,runtimeVersionv4.0" />

编辑

还有其他帖子暗示解决此问题的解决方案是RAMMFAR或RunAllManagedModulesForAllRequests.启用此选项将为所有请求启用所有托管模块.这意味着在不需要的情况下,.NET将处理图像,PDF和其他所有内容之类的静态文件.除非您有特定案例,否则最好将此选项保留.

其他推荐答案

在绕过一些戳戳之后,我发现Raseedurltofilesystemmapping对我根本不起作用,在我的情况下有效的是将Rammfar设置为true,对于(.NET 4.0 + MVC3)和(.NET 4.5)和(.NET 4.5 + mvc4).

<system.webserver>
    <modules runAllManagedModulesForAllRequests="true">

请注意设置rammfar true

其他推荐答案

我相信您必须在web.config中设置属性raseledurltofilesystemmapping. haack 写了一篇文章不久前(还有其他一些 posts 相同类型的问题)

<system.web>
<httpRuntime relaxedUrlToFileSystemMapping="true" />

编辑
从下面的评论中,以后的.NET/IIS版本可能要求它在system.WebServer元素中.

<system.webServer>
<httpRuntime relaxedUrlToFileSystemMapping="true" />

以上所述是小编给大家介绍的在ASP.NET mvc和IIS中,URL中的圆点导致404,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/34169.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。