Asp.net mvc 文件名作为MVC控制器的最后一个参数

Asp.net mvc 文件名作为MVC控制器的最后一个参数,asp.net-mvc,Asp.net Mvc,我有一个MVC控制器,它有一个包含几个参数的方法,最后一个参数是一个带有扩展名的文件名,正是最后一个参数导致了问题 假设我希望创建的格式是: http://example.com/worker/90bef68f718a434bb588120e717fa29c/foo.txt 这个URL将是404,但是如果我删除句点或添加一个尾随符,那么处理程序将被正常命中并执行 不幸的是,我尝试实现的URL格式无法适应这两种解决方法 路线定义如下: routes.MapRoute(

我有一个MVC控制器,它有一个包含几个参数的方法,最后一个参数是一个带有扩展名的文件名,正是最后一个参数导致了问题

假设我希望创建的格式是:

http://example.com/worker/90bef68f718a434bb588120e717fa29c/foo.txt
这个URL将是404,但是如果我删除句点或添加一个尾随符,那么处理程序将被正常命中并执行

不幸的是,我尝试实现的URL格式无法适应这两种解决方法

路线定义如下:

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

一些阅读建议将url模板更改为包含{fileName}到{*fileName},但这也无法解决此问题。

我可以建议两种解决方案

首先像这样使用路由(文件名和文件扩展名在单独的参数中)

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

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

希望这能对您有所帮助。

在生成url之前,您是否考虑过对文件名进行编码?就像使用before一样,您可以使用其他格式的Url,然后我可以建议解决方案。我建议使用worker/{guid}/{fileName}/{fileextension}。这会解决你的问题。如果我能。。。但是不能。URL格式设置为stone格式,并以带有扩展名的文件名结尾。web.config更改完成了此操作,谢谢!马上你知道清除现有的UrlRoutingModule-4.0配置是否有任何积极或消极的影响吗?老实说,我还必须深入研究IIS中的这一点。我正在调查此事。此时我可以告诉您,它清除了IIS的默认设置,然后再次添加相同的模块。我会在这里更新帖子。
 <system.webServer>
  <modules>
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  </modules>
</system.webServer>
  routes.MapRoute(
    name: "Worker Handler",
    url: "worker/{guid}/{fileName}",
    defaults: new { controller = "Worker", action = "Index" }
    );