我有以下路线配置:
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调用此Action时,我得到一个404.当我在文件名中调用没有点的Action时,它可以工作。如何让MVC将完整的文件名传递给我的参数文件名?
答案 0 :(得分: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>
答案 1 :(得分: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> ...