Attribute Routing不起作用。
Attribute Routing不起作用。
我正在使用Visual Studio Express 2013创建一个REST API。
我有两个控制器:一个用于订单,一个用于客户。
我已经创建了以下内容:
/api/clients
- 获取所有客户的信息
/api/clients/1
- 获取id为1的客户的信息
/api/orders/10
- 获取id为10的订单的信息
现在,我想创建以下内容:
/api/clients/1/orders
- 获取id为1的客户的所有订单信息
我已经阅读过关于属性路由的内容,但我无法使其工作。
OrdersController.cs
[EnableCors(origins: "*", headers: "*", methods: "*")] public class OrdersController : ApiController { public Order Get(string id) { // ... } [Route("clients/{id}/orders")] public ListGetByClient(string id) { // ... } }
WebApiConfig.cs
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // 启用CORS config.EnableCors(); //config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
RouteConfig.cs
public class RouteConfig { 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 } ); } }
像这样,所有其他请求都能正常工作,但是当我尝试访问/api/clients/1/orders
时,我收到错误HTTP Error 404.0 - Not Found. The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
但是,只要我取消注释config.MapHttpAttributeRoutes();
,我就无法访问任何请求 - 它们都返回以下结果:
An error has occurred. The object has not yet been initialized. Ensure that HttpConfiguration.EnsureInitialized() is called in the application's startup code after all other initialization code. System.InvalidOperationException at System.Web.Http.Routing.RouteCollectionRoute.get_SubRoutes() at System.Web.Http.Routing.RouteCollectionRoute.GetRouteData(String virtualPathRoot, HttpRequestMessage request) at System.Web.Http.WebHost.Routing.HttpWebRoute.GetRouteData(HttpContextBase httpContext)
我在这里做错了什么?
Attribute Routing是ASP.NET Web API 2中的一种路由方式。在使用Attribute Routing时,有一个问题是无法正常工作。问题的原因是没有正确配置Attribute Routing,解决方法是修改Global.asax文件中的代码。
首先,取消注释config.MapHttpAttributeRoutes()
这一行代码。然后,在Global.asax文件中,将WebApiConfig.Register(GlobalConfiguration.Configuration);
替换为GlobalConfiguration.Configure(WebApiConfig.Register);
。
具体的修改步骤如下:
1. 取消注释config.MapHttpAttributeRoutes()
这一行代码。
2. 在Global.asax文件中,将WebApiConfig.Register(GlobalConfiguration.Configuration);
替换为GlobalConfiguration.Configure(WebApiConfig.Register);
。
修改后,问题得到解决,可以正常访问请求了。
需要注意的是,虽然问题已经解决,但另一个用户指出路径设置错误。在感谢其他用户的回答时,作者指出了真正的问题是global.asax文件配置错误。
要使路径正常工作,必须先修复配置问题。作者对其他用户指出的问题表示感谢。
文章最后提到,如果可以的话,作者希望能将两个回答都标记为已接受。感谢大家的帮助!
更多关于Attribute Routing的内容可以参考:Attribute Routing in ASP.NET Web API 2。