Pas*_*han 6 .net c# .net-core asp.net-core
我需要自动将 api/ 前缀添加到我的 asp .net core Web API 中的每个端点。怎么做?
您可以自定义MvcOptionsExtensions全局设置路由前缀,而不用手动更改路由属性。
1.定制MvcOptionsExtensions:
public static class MvcOptionsExtensions
{
public static void UseRoutePrefix(this MvcOptions opts, IRouteTemplateProvider routeAttribute)
{
opts.Conventions.Add(new RoutePrefixConvention(routeAttribute));
}
public static void UseRoutePrefix(this MvcOptions opts, string
prefix)
{
opts.UseRoutePrefix(new RouteAttribute(prefix));
}
}
public class RoutePrefixConvention : IApplicationModelConvention
{
private readonly AttributeRouteModel _routePrefix;
public RoutePrefixConvention(IRouteTemplateProvider route)
{
_routePrefix = new AttributeRouteModel(route);
}
public void Apply(ApplicationModel application)
{
foreach (var selector in application.Controllers.SelectMany(c => c.Selectors))
{
if (selector.AttributeRouteModel != null)
{
selector.AttributeRouteModel = AttributeRouteModel.CombineAttributeRouteModel(_routePrefix, selector.AttributeRouteModel);
}
else
{
selector.AttributeRouteModel = _routePrefix;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
2:在Startup.cs(.Net6之前的版本)或Program.cs(.Net 6以上的版本)中注册:
services.AddControllers(o =>{
o.UseRoutePrefix("api");
});
Run Code Online (Sandbox Code Playgroud)
或者:
builder.Services.AddControllers(o =>{
o.UseRoutePrefix("api");
});
Run Code Online (Sandbox Code Playgroud)
使用路由前缀“api/”创建控制器构造函数
例如,假设您的控制器类名称是 CustomerController
[Route("api/[controller]")]
public class CustomerController : ControllerBase
{
}
// This will become api/customer
[HttpGet]
public async Task<ActionResult> GetCustomers()
{
// Code to get Customers
}
// This will become api/customer/{id}
[HttpGet]
[Route("{id}")]
public async Task<ActionResult> GetCustomerById(int id)
{
// Code to get Customer by Id
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3170 次 |
| 最近记录: |