【问题标题】:IIS 8.5 MVC 5 Routes 'api/controllerName' gives 404 Not Found ErrorIIS 8.5 MVC 5 Routes 'api/controllerName' 给出 404 Not Found 错误
【发布时间】:2015-06-07 07:40:39
【问题描述】:

MVC 5 Webapi 项目中,我尝试使用 URL 'api/controllerName' 通过 jquery 发出 GET 请求。 Web 应用程序托管在默认网站下,网站的根目录是“localhost/myApp”。

路由“api/controllerName”被转换为“localhost/api/controllerName”而不是“localhost/myApp/api/controllerName”抛出404 Not found Error

这与 IIS 8.5 和 MVC 5 路由有关,因为:

  1. 相同的设置在 IIS 7.5 上运行良好
  2. 如果我不使用虚拟目录并将应用程序直接托管在默认网站上,则相同的设置在 IIS 8.5 上运行良好。

我的 Global.asax.cs 的 RegisterRoutes 方法如下所示

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

    }

【问题讨论】:

  • 如果它在分配给默认网站的文件夹中工作(默认为 'c:\inetpub\wwwroot'),但不在其他文件夹中,则似乎您尚未在IIS 正确。我不认为您可以假设如果您将 Web 应用程序发布到 c:\inet\wwwroot\myApp',然后您可以在浏览器中使用“localhost/myApp”访问它。相反,您需要在例如,IIS 绑定对话框中的不同端口。

标签: asp.net-mvc-5 iis-8.5


【解决方案1】:

我想通了。显然,IIS 7.5 在裸路由“api/controllerName”上运行良好,但 IIS 8.5 需要使用@Url.RouteURL 实用程序创建的完全限定路由,RouteName 为“DefaultApi”。

我用

替换了 URL
'@Url.RouteUrl("DefaultApi", new { httproute = "", controller = "controllerName"})'

它就像一个魅力(在 IIS 7.5 和 IIS 8.5 上)。

【讨论】:

    猜你喜欢
    • 2016-08-30
    • 2021-12-18
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    相关资源
    最近更新 更多