【问题标题】:ASP.net MVC 5 Route with two parameter带有两个参数的 ASP.net MVC 5 Route
【发布时间】:2015-06-19 12:14:31
【问题描述】:

我想创建带有 2 个参数的 Web 应用程序。将此代码添加到 RegisterRoutes 函数中:

routes.MapRoute(
               "pageroute",                                              
               "page/{pageid}/{pagename}",                          
               new { controller = "page", action = "Index", pageid = "", pagename = "" } 
           );

并在pageController中添加此方法:

  public ActionResult Index(int pageid,string pagename)
        {
            return View();
        }

现在当我使用这个参数运行应用程序时

http://localhost:1196/page/4/Pagename

应用程序运行成功,但使用此参数运行时

http://localhost:1196/page/4/Pagename.html

应用程序返回 404 错误

HTTP Error 404.0 - Not Found
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

在参数中添加 .html 时返回 404 错误。 为什么?

【问题讨论】:

  • 当 ulr 包含“.html”时,请求会转到 html 管道以在 iis 处处理请求。您必须通过 ASP.NET 管道强制所有请求。
  • 同意圣普拉迪普
  • @SainPradeep 如何强制使用 ASP.net 处理请求?
  • @dinav Ahrie 我使用 MVC 没有 .aspx 文件,当用户调用此 URL 应用程序从数据库加载 page1.html 并创建页面并返回给用户时,page1.html 是保存在我的数据库中的页面名称

标签: asp.net asp.net-mvc


【解决方案1】:

因为默认情况下不通过 MVC/IIS 提供 HTML 文件。

您的应用程序查找名为 Pagename.html物理 文件,但在其中找不到。因此 - 404。

要使其正常工作,您需要设置 IIS 以捕获对带有 HTML 扩展名的文件的请求并将此请求传递给 MVC。

编辑:Here 是一个类似的问题,其中 OP 通过将“托管管道模式”切换为“经典”找到了解决方案。

【讨论】:

    【解决方案2】:

    尝试将路线更改为:

    routes.MapRoute(
               "pageroute",                                              
               "page/{pageid}/{*pagename}",                          
               new { controller = "page", action = "Index", pageid = "", pagename = "" } 
           );
    

    这将匹配 page/1/* 中的所有内容,因此 .html 应该通过这条路线。

    我无法重现 .html 文件使用与问题类似的场景给出 404 的问题,因此可能存在其他路由问题或 IIS 配置导致此问题。

    【讨论】:

      猜你喜欢
      • 2011-02-11
      • 1970-01-01
      • 2015-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      • 2017-04-17
      • 2015-04-03
      相关资源
      最近更新 更多