Asp.net mvc URL中不存在可选参数时,找不到Web API操作
请帮忙。 为了能够在URL中使用方法,我必须更改Web API的路由:Asp.net mvc URL中不存在可选参数时,找不到Web API操作,asp.net-mvc,asp.net-mvc-routing,asp.net-mvc-5,asp.net-web-api2,Asp.net Mvc,Asp.net Mvc Routing,Asp.net Mvc 5,Asp.net Web Api2,请帮忙。 为了能够在URL中使用方法,我必须更改Web API的路由: public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); // for MVC controllers routes.MapRoute(
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// for MVC controllers
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Editions", action = "Index", id = UrlParameter.Optional }
);
// for Web API
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
我有一个控制器
public class PositionsController : ApiController
{
[HttpGet]
public JToken Approved()
{
// some code here
}
}
对于带有参数的方法,一切都很好,但我不能调用像http://localhost/API/Positions/Approved
。我没有调用Approved
方法,而是得到了404notfound错误。我做错了什么
有趣的部分:调用URLhttp://localhost/API/Positions/Approved/whatever
有效。看起来ID并不像我想的那么随意
谢谢你的帮助 您的问题是第一条路线(MVC)被匹配,而不是您实际想要的路线 所以对于像
http://localhost/API/Positions/Approved
该应用程序正在寻找一个名为“APIController”的控制器,其操作名为“Positions”,字符串参数“id”将设置为“Approved”
快速解决方案是更改路由声明,使API路由显示在MVC路由之前,但如前所述,我会将路由分为各自的配置(RouteConfig和WebApiConfig),并确保在Global.asax.cs中以正确的顺序注册路由:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
或者,如果您使用的是WebApi2,则可以使用属性路由来简化操作。这是您定义的唯一路由还是以前有其他路由?我刚刚构建了您的场景,效果很好。你的应用程序中有更多内容。更多路线,或控制器中的更多内容您是否碰巧将路线放入
RouteConfig
而不是WebApiConfig
?它们的工作原理稍有不同。很抱歉不清楚。现在我用所有路线配置编辑了我的问题。是的,它在RouteConfig中。维特特,请你再解释一下好吗?好的!就是这样!谢谢。配置顺序的改变成功了。