Filename作为MVC控制器的最后一个参数

时间:2014-11-08 01:53:45

标签: asp.net-mvc

我有一个MVC控制器,其中包含一些参数,其中最后一个是带扩展名的文件名,这是导致问题的最后一个参数。

说我想创建的格式是:

http://example.com/worker/90bef68f718a434bb588120e717fa29c/foo.txt

此URL将为404,但是如果我删除句点或添加尾随/然后处理程序被命中并正常执行。

不幸的是,我尝试实现的网址格式无法适应这些工作。

路线定义如下:

     routes.MapRoute(
        name: "Worker Handler",
        url: "worker/{guid}/{fileName}",
        defaults: new { controller = "Worker", action = "Index" }
        );

有些阅读建议更改网址模板以包含{fileName}到{* fileName},但是这也无法解决此问题。

1 个答案:

答案 0 :(得分:2)

我可以提出两个解决方案。

首先使用这样的路由(FileName和FileExtention在单独的参数中)

routes.MapRoute(
        name: "Worker Handler",
        url: "worker/{guid}/{fileName}/{fileextention}",
        defaults: new { controller = "Worker", action = "Index" }
        );

另一个解决方案是在web.config中添加以下内容。

 <system.webServer>
  <modules>
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  </modules>
</system.webServer>

http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html

获取帮助

路线应该是这样的。

  routes.MapRoute(
    name: "Worker Handler",
    url: "worker/{guid}/{fileName}",
    defaults: new { controller = "Worker", action = "Index" }
    );

希望这对你有所帮助。