2015-04-02 89 views
0

在一个MVC 5 Webapi项目中,我试图通过使用URL'api/controllerName'的jquery执行GET请求。该Web应用程序托管在默认网站下,网站的根目录是“localhost/myApp”。IIS 8.5 MVC 5 Routes'api/controllerName'给出404未找到错误

将路由'api/controllerName'转换为'localhost/api/controllerName'而不是'localhost/myApp/api/controllerName'抛出404找不到错误

这必须做一些与IIS 8.5和MVC 5路由,这是因为:

  1. 相同的设置上顺畅运行IIS 7.5
  2. 设定了相同的作品以及在IIS 8.5,如果我不使用一个虚拟目录并直接在Default Web Site上托管应用程序。

我的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 } 
     ); 

    } 
+0

如果它在分配给默认网站的文件夹中(默认为'c:\ inetpub \ wwwroot'),但不在其他文件夹中,那么您似乎没有在IIS中正确设置网站。我不认为你可以假设,如果你发布你的web应用到c:\ inet \ wwwroot \ myApp,然后你可以在浏览器中用'http:// localhost/myApp'访问它,相反,你需要设置在IIS绑定对话框中的例如不同的端口上的网站。 – 2015-04-06 05:35:25

回答

1

我想通了这一点。显然,IIS 7.5在裸路由'api/controllerName'下运行良好,但IIS 8.5需要一个使用@ Url.RouteURL实用工具创建的完全合格的路由,路由名称为“DefaultApi”。

我取代的URL以

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

和它的工作就像一个魅力(在两个IIS 7.5和IIS 8.5)。