【问题标题】:How to make MVC accept dots in parameters? [duplicate]如何让 MVC 接受参数中的点? [复制]
【发布时间】:2015-04-10 14:44:18
【问题描述】:

我有以下路线配置:

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 将完整的文件名传递给我的参数文件名?

【问题讨论】:

标签: c# asp.net-mvc model-view-controller http-status-code-404


【解决方案1】:

感谢@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> ...

【讨论】:

    【解决方案2】:

    这可能是因为如果您的 url 包含一个点,IIs 将其作为“物理路径”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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-20
      • 1970-01-01
      • 2016-10-12
      • 2012-10-22
      • 2015-07-15
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多