Asp.net mvc 5 IIS 8.5 MVC 5路线';api/controllerName';给出404未找到错误

Asp.net mvc 5 IIS 8.5 MVC 5路线';api/controllerName';给出404未找到错误,asp.net-mvc-5,iis-8.5,Asp.net Mvc 5,Iis 8.5,在一个MVC5WebAPI项目中,我尝试使用URL“api/controllerName”通过jquery执行GET请求。web应用程序托管在默认网站下,web站点的根是“localhost/myApp” 路由“api/controllerName”被转换为“localhost/api/controllerName”,而不是“localhost/myApp/api/controllerName”,抛出404未找到错误 这与IIS 8.5和MVC 5路由有关,因为: 同样的设置在IIS 7.5上运

在一个MVC5WebAPI项目中,我尝试使用URL“api/controllerName”通过jquery执行GET请求。web应用程序托管在默认网站下,web站点的根是“localhost/myApp”

路由“api/controllerName”被转换为“localhost/api/controllerName”,而不是“localhost/myApp/api/controllerName”,抛出404未找到错误

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

  • 同样的设置在IIS 7.5上运行良好
  • 如果我不使用虚拟目录并直接在默认网站上托管应用程序,那么同样的设置在IIS8.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 }
            );
    
        }
    

    我明白了。显然,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上)。

    如果它在指定给默认网站的文件夹中工作(默认情况下,这是“c:\inetpub\wwwroot”),但不在其他文件夹中,则表明您没有在IIS中正确设置网站。我不认为您可以假设如果将web应用发布到c:\inet\wwwroot\myApp“您就可以使用”在浏览器中访问它。相反,您需要在IIS绑定对话框中的其他端口上设置网站。