WebApi 中的特性路由

mac2024-03-06  31

如果http 请求的的方法相同(比如都是post),并且请求的参数也相同,这时候有点不好办了,此时我们采用特性路由 特性路由的目的是为了解决我们公共路由模板引擎解决不了的问题。一个Action 定义了特性路由之后,就能通过特性路由上的路由规则找到 1:在用特性路由之前先更改WebApiConfig public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.MapHttpAttributeRoutes();// 用特性路由时首先加上这行代码 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional }, constraints: new { id=@"/d+"} ); } } 2:更改Global.asax.cs public class WebApiApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); //WebApiConfig.Register(GlobalConfiguration.Configuration); // 这行代码替换成下面一行代码 GlobalConfiguration.Configure(WebApiConfig.Register); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } } 使用方法一 public class ValuesController : ApiController { [Route("api/Val/Get")] // 表示 访问Get()方法时 就是api/Val/Get public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } [Route("Values/{id}/Get")] // 还可以使用带参数访问:Values/5/Get public string Get(int id) { return "value"; } } 使用方法二 路由前缀 同一个控制器的所有的action的所有特性路由标识一个相同的前缀,这种做法并非必须,但这样能够增加url的可读性,一般的做法是在控制器上面使用特性,[RoutePrefix]来标识 [RoutePrefix("api/Values")] public class ValuesController : ApiController { [Route("GetMy")] // 访问时 api/Values/GetMy public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } }
最新回复(0)