今天复习一下WebAPI的路由知识:
首先分析一下MVC路由和WebAPI路由的区别:
在mvc里,默认的路由机制是通过URL路径去匹配控制器和Action方法的,在mvc中的默认路由定义在App_Start文件夹下的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 } ); } }
在webapi里,默认的路由机制是通过URL路径去匹配控制器,然后通过http的方法去匹配Action的,在WebAPI中的默认路由定义在App_Start文件夹下的WebApiConfig.cs文件下:
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API 配置和服务 // Web API 路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "RestFulApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }
WebApi的路由基础:
将MapHttpRoute方法转定义有4个重载的方法:
// // 摘要: // 映射指定的路由模板。 // // 参数: // routes: // 应用程序的路由的集合。 // // name: // 要映射的路由的名称。 // // routeTemplate: // 路由的路由模板。 // // 返回结果: // 对映射路由的引用。 public static IHttpRoute MapHttpRoute(this HttpRouteCollection routes, string name, string routeTemplate); // // 摘要: // 映射指定的路由模板并设置默认路由值。 // // 参数: // routes: // 应用程序的路由的集合。 // // name: // 要映射的路由的名称。 // // routeTemplate: // 路由的路由模板。 // // defaults: // 一个包含默认路由值的对象。 // // 返回结果: // 对映射路由的引用。 public static IHttpRoute MapHttpRoute(this HttpRouteCollection routes, string name, string routeTemplate, object defaults); // // 摘要: // 映射指定的路由模板并设置默认路由值和约束。 // // 参数: // routes: // 应用程序的路由的集合。 // // name: // 要映射的路由的名称。 // // routeTemplate: // 路由的路由模板。 // // defaults: // 一个包含默认路由值的对象。 // // constraints: // 一组表达式,用于指定 routeTemplate 的值。 // // 返回结果: // 对映射路由的引用。 public static IHttpRoute MapHttpRoute(this HttpRouteCollection routes, string name, string routeTemplate, object defaults, object constraints); // // 摘要: // 映射指定的路由模板并设置默认的路由值、约束和终结点消息处理程序。 // // 参数: // routes: // 应用程序的路由的集合。 // // name: // 要映射的路由的名称。 // // routeTemplate: // 路由的路由模板。 // // defaults: // 一个包含默认路由值的对象。 // // constraints: // 一组表达式,用于指定 routeTemplate 的值。 // // handler: // 请求将被调度到的处理程序。 // // 返回结果: // 对映射路由的引用。 public static IHttpRoute MapHttpRoute(this HttpRouteCollection routes, string name, string routeTemplate, object defaults, object constraints, HttpMessageHandler handler);
看看每个参数的作用:
name:表明路由的名称