路由注册方式
- 路由模板的方式:使用与传统的MVC模式,可以用于为MVC的页面Web配置。
- RouteAttribute 方式:更适合Webapi的前后端分离模式。
RouteAttribute路由注册
在 Startup 类中的的 Configure 方法中使用 UseRouting 和 UseEndpoints :
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
然后使用 RouteAttribute 标签进行路由注册:
[Route("api/[controller]/[action]")]
路由约束
- 类型约束
- 范围约束
- 正则表达式
- 是否必选
- 自定义 IRouteConstraint
类型约束
[HttpGet("{id:int}")]
范围约束
[HttpGet("{id:max(20)}")]
是否必选
[HttpGet("{name:required}")]
正则表达式
[HttpGet("{number:regex(^\\d{{3}}$)}")]
自定义 继承 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;
}
}
}
在 ConfigureServices 进行注册:
public void ConfigureServices(IServiceCollection services)
{
services.AddRouting(options =>
{
options.ConstraintMap.Add("myRoute", typeof(MyRouteConstraint));
});
}
使用自定义路由约束:
[HttpGet("{id:myRoute}")]
URL 生成
.Net Core 提供了两种URL生成方式:
LinkGenerator
public bool Test([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;
}
WebAPI 定义
- Restful 不是必须的,协作方约定好路由、请求方式、响应内容等相关契约即可
- 约定好 API 的表达契约
- 将 API 约束在特定目录下,如 /api/
- 使用 ObsoleteAttribute 标记即将废弃的 API
|