在ASP.NET Web API中,路由是用于匹配请求的URL路径和具体的控制器和操作方法的机制。在.NET Core 3.1中,可以使用Attribute路由或约定路由来配置路由。
下面是一个使用Attribute路由的示例:
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values
[HttpGet]
public ActionResult> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
[HttpGet("{id}")]
public ActionResult Get(int id)
{
return "value";
}
// POST api/values
[HttpPost]
public void Post([FromBody] string value)
{
}
// PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}
// DELETE api/values/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
上述代码定义了一个名为ValuesController的控制器,使用了[Route("api/[controller]")]属性来指定控制器的根路由。每个操作方法都使用了不同的HTTP动词(GET、POST、PUT、DELETE)和不同的路由模板(如""、"{id}")。
当收到对"/api/values"的GET请求时,将调用Get()方法;当收到对"/api/values/{id}"的GET请求时,将调用Get(int id)方法,其中{id}将被替换为实际的值;以此类推。
如果要使用约定路由,可以在Startup.cs文件中进行配置,如下所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(options =>
{
options.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer()));
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller}/{action}/{id?}");
});
}
上述代码将配置一个默认的约定路由模板,其中{controller}将匹配控制器名称,{action}将匹配操作方法名称,{id?}表示id参数为可选参数。
这样,例如,对于"/values/get/1"的请求将调用ValuesController的Get方法,并将id参数设置为1。
这是ASP.NET Web API (.NET Core 3.1)中处理终点路由问题的两种常见方法。你可以根据自己的需求选择合适的方法来配置路由。