在url中添加文件名

时间:2014-05-31 11:46:13

标签: asp.net-mvc routes url.action

我想在ASP.NET MVC中自定义路由。 随着

@Url.Action("ViewDoc", "Home", new { FileName = "ABC.pdf" })

 routes.MapRoute(
         name: "",
         url: "{controller}/{action}/{FileName}",
         defaults: new
         {
             controller = "Home",
             action = "ViewDoc",
             FileName = UrlParameter.Optional
         }

我得到了

http://localhost/Home/ViewDoc?FileName=ABC.pdf

如何获得以下内容?

http://localhost/Home/ViewDoc/ABC.pdf

3 个答案:

答案 0 :(得分:2)

您粘贴的代码是正确的,但路线设置中的顺序可能是错误的。将routes.MapRoute方法移至上方默认路由,它应该按预期工作。

答案 1 :(得分:1)

关于404错误:

我使用的是同一种带有文件名的URL,并且遇到了相同的路由问题。 就像你一样,我试着用控制器接听电话。

我认为问题是URL被视为服务器上文件的直接链接,它只会尝试获取文件而不是调用控制器。在URL建议的物理位置找不到文件将触发404错误。

我选择使用的解决方法是在文件名后面的URL的最后添加一个“/”字符。 还有其他人。

我建议你阅读这个相关的问题: Dots in URL causes 404 with ASP.NET mvc and IIS

答案 2 :(得分:0)

我能够

 localhost/Home/ViewDoc/ABC.pdf 

public FileResult View(string FileName) { 

routes.MapRoute( "", "Home/ViewDoc/{FileName}", new { controller = "Home", action = "ViewDoc" } ); 

对于错误404.0,在

下添加了以下内容
 <add
       name="AdfsMetadata"
       path="/Home/ViewDocu/*"
       verb="POST"
       type="System.Web.Handlers.TransferRequestHandler"
       preCondition="integratedMode,runtimeVersionv4.0" />