【NetCore】10-路由定义
文章目录
- 路由与终结点:如何规划好Web Api
- 1. 路由
- 1.1 路由映射
- 1.2 路由注册方式
- 1.3 路由约束
- 总结: Web Api定义
路由与终结点:如何规划好Web Api
1. 路由
1.1 路由映射
路由系统核心作用是指URL和应用程序Controller的对应关系的一种映射
这种映射的作用:
1.把URL映射到对应的Controller的action上
2.根据Controller和action的名字生成URL
1.2 路由注册方式
- 路由模板的方式 ⇒ 传统方式,可作为MVC页面的Web配置
- RouteAttribute方式 ⇒ 更适合Web Api
1.3 路由约束
路由约束指的是路由如何匹配
- 类型约束
- 范围约束
- 正则约束
- 是否必选
- 自定义IRouteConstraint
根据路由信息URL生成地址的类
- LinkGenerator
- IUrlHelper
/// <summary>/// 类型约束/// </summary>/// <param name="id">必须可以转long</param>/// <returns></returns>[HttpGet("{id:MyRouteConstraint}")]public bool OrderExist(object id){return true;}/// <summary>/// 范围约束/// </summary>/// <param name="id"></param>/// <returns></returns>[HttpGet("{id:max(20)}")]public bool Max(long id){return true;}/// <summary>/// 是否必选/// </summary>/// <param name="name"></param>/// <returns></returns>[HttpGet("{name:required}")]public bool Reque(string name){return true;}/// <summary>/// 正则约束/// </summary>/// <param name="number"></param>/// <returns></returns>[HttpGet("{number:regex(^\\d{{3}}$)}")]public bool Bumber(string number){return true;}
// 自定义IRouteConstraint
// 自定义路由约束类
public class MyRouteConstraint : IRouteConstraint
{public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection){if (RouteDirection.IncomingRequest == routeDirection){var v= values[routeKey];if (long.TryParse(v.ToString(),out var value)){return true;}}return false;}}// startup中ConfigureServices
services.AddRouting(options =>
{options.ConstraintMap.Add("MyRouteConstraint", typeof(MyRouteConstraint));
});[HttpGet("{id:MyRouteConstraint}")]
public bool OrderExist([FromRoute]string id)
{return true;
}
LinkGenerator生成Url
[HttpGet("{id:max(20)}")]
public bool Max([FromRoute] long id, [FromServices] LinkGenerator linkGenerator)
{var a = linkGenerator.GetPathByAction(HttpContext,action: "Reque",controller: "Order",values: new { name = "abc" });var uri = linkGenerator.GetUriByAction(HttpContext,action: "Reque",controller: "Order",values: new { name = "abc" });return true;}
总结: Web Api定义
- Restful不是必须的
- 约定好API的表达契约
- 将API约束在特定目录下,如/api/
- 使用ObsoleteAttribute标记即将废弃的API