Asp.net mvc 5 IIS 8.5 MVC 5路线';api/controllerName';给出404未找到错误
在一个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路由有关,因为: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上运
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绑定对话框中的其他端口上设置网站。