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

Nor*_*man 5 c# model-view-controller asp.net-mvc http-status-code-404

我有以下路由配置:

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

并遵循控制器代码:

public ActionResult Index(string filename)
    { ...
Run Code Online (Sandbox Code Playgroud)

当我用http://test.com/downloads/test.txt调用此Action时,我得到一个404.当我在文件名中调用没有点的Action时,它可以工作.如何让MVC将完整的文件名传递给我的参数文件名?

AFr*_*act 7

这可能是因为如果你的网址包含一个点,IIs将其作为"物理路径"网址处理,而不是重写.

解决此问题的一种巧妙方法是为您自己的方案定义处理程序,例如:

<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>
Run Code Online (Sandbox Code Playgroud)