如何让 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>
我有以下路由配置:
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>