如何让 MVC 接受参数中的点?

How to make MVC accept dots in parameters?

我有以下路由配置:

routes.MapRoute(
            name: "Downloads",
            url: "downloads/{filename}",
            defaults: new { controller = "Downloads", action = "Index", filename = UrlParameter.Optional }
        );

和以下控制器代码:

public ActionResult Index(string filename)
    { ...

当我用 http://test.com/downloads/test.txt 调用这个动作时,我得到一个 404。当我调用文件名中没有点的动作时,它起作用了。如何让 MVC 将完整的文件名传递给我的参数文件名?

谢谢@Coder。我将以下代码 (Dots in URL causes 404 with ASP.NET mvc and IIS) 添加到我的 web.config 并且有效:

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

发生这种情况可能是因为如果您的 url 包含一个点,IIs 将其作为 "physical path" url 而不是重写的点来处理。

克服这个问题的一个巧妙方法是为您自己的方案定义一个处理程序,例如:

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