前言
MSDN文档,对ASP.NETCore中的路由完整的介绍
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/routing?view=aspnetcore-3.0#routing-basics
概念
路由负责匹配传入的 HTTP 请求,然后将这些请求发送到应用的可执行终结点。
终结点是应用的可执行请求处理代码单元。 终结点在应用中进行定义,并在应用启动时进行配置。
终结点匹配过程可以从请求的 URL 中提取值,并为请求处理提供这些值。 通过使用应用中的终结点信息,路由还能生成映射到终结点的 URL。
测试步骤
ValuesController.cs代码
[Route("api/[controller]")] public class ValuesController : Controller { // GET api/values [HttpGet] public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } // GET api/values/5 [HttpGet("{id}")] public string 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) { } }
将Startup.cs中的路由配置注释
运行结果,请求返回400
注册路由到控制器
先取消注释,
路由配置,
直接Get请求到控制器,此时会根据HTTP请求去匹配到对应的方法,Get请求访问特性为HttpGet的Action方法
对应的Action方法
发生路由重载
同一中Http请求方法,有2个Action方法,如下如
此时请求,会报错
解决办法
1.修改路由规则 /api/[controller]/[action]
2.修改谓词,比如一个get,一个post
3.如果有参数的话,Get方法添加参数,比如[HttpGet("{id}")],此时的方法名为public string Get(int id)
4.按照业务功能,创建一个新的相关的Controller,此方法需要根据业务判断去决定是否使用。
项目实际使用
创建了一个类,继承自Controller类,标记为APIController,路由配置到Action方法,可规避掉路由重载的问题