我有一个项目要求我的 URL 在路径中有点。例如,我可能有一个 URL,例如 www.example.com/people/michael.phhelps
带有点的 URL 会生成 404。我的路由很好。如果我传入迈克尔菲尔普斯,没有点,那么一切正常。如果我添加点,我会收到 404 错误。示例站点在带有 IIS8 Express 的 Windows 7 上运行。URLScan 未运行。
我尝试将以下内容添加到我的 web.config 中:
<security> <requestFiltering allowDoubleEscaping="true"/> </security>
不幸的是,这并没有什么不同。我刚刚收到 404.0 Not Found 错误。
这是一个 MVC4 项目,但我认为这无关紧要。我的路由工作正常,并且我期望的参数在那里,直到它们包含一个点。
我需要配置什么才能在我的 URL 中添加点?
我通过编辑我的网站的 HTTP 处理程序来完成这项工作。对于我的需要,这很好用并解决了我的问题。
我只是添加了一个新的 HTTP 处理程序来查找特定的路径条件。如果请求匹配,它会正确发送到 .NET 进行处理。我对 URLRewrite hack 或启用 RAMMFAR 的解决方案更满意。
例如,让 .NET 处理 URL **www.example.com/people/michael.phelps 将以** 下行添加到您网站的 web.configsystem.webServer / handlers元素中:
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。启用此选项将为所有请求启用所有托管模块。这意味着静态文件(如图像、PDF 和其他所有文件)将在不需要时由 .NET 处理。除非您有特定情况,否则最好不要使用此选项。
RAMMFAR
RunAllManagedModulesForAllRequests