【问题标题】:Adding filename in url在url中添加文件名
【发布时间】:2015-03-24 00:20:50
【问题描述】:

我想在 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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我可以通过 public FileResult View(string FileName) { 和 routes.MapRoute( "", "Home/ViewDoc/{FileName}", new { controller = "Home",动作 = "ViewDoc" } );但现在我收到错误:HTTP 错误 404.0 - 未找到您要查找的资源已被删除、更改名称或暂时不可用。
    • 那么我的回答正确吗?如果是这样,您是在问另一个问题吗?
    • 我必须按照上面的注释更改代码才能使其正常工作。
    【解决方案2】:

    关于您的 404 错误:

    我使用了相同类型的 URL,最后有一个文件名,并且遇到了相同的路由问题。 和你一样,我尝试用控制器来接听电话。

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

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

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

    【讨论】:

      【解决方案3】:

      我能得到

       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" />
      

      【讨论】:

        猜你喜欢
        • 2020-07-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-17
        • 1970-01-01
        • 2022-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多