当前位置: 首页 > 工具软件 > CoreHTTP > 使用案例 >

.net core WebApi 带属性路由([HttpGet("{id}", Name = "Get")])

谷翰飞
2023-12-01
  1. WebApi 带属性路由介绍 参见:WebApi路由机制详解
    内容详实,举例简单易懂。

  2. 但是该文中没有对带属性路由的另一种方式做详细介绍,即在HttpGet、HttpPut、HttpPost、HttpDelete 这些标签中添加属性。以下以[HttpGet("{id}", Name = “Get”)] 为例

  3. 在Controller中定义属性路由
    [


```csharp
Route("api/[controller]")]
public class UserManageController : Controller
    {
        // GET: api/UserManager
        [HttpGet]
        public IActionResult GetUserInfoAll()
        {
            return new string[] { "value1", "value2" };
        }

        // GET: api/UserManager/5
        [HttpGet("{id}", Name = "GetTest")]
        [ActionName("Get1")]
        public string Get()
        {
            return "value";
        }
   }

(1)使用 http://localhost:5000/api/userManage 请求,返回

value1, 
value2

属性路由中没有定义action,同时存在多条Get方法,但是第二条Get方法中带有了特定路由属性,因此匹配时自动排除,默认匹配到GetUserInfoAll方法。

(2)使用 http://localhost:5000/api/userManage/GetUseInfoAll 请求,返回

value

由于属性路由中没有定义action,使用URl访问时,此时“GetUseInfoAll ”匹配的是“{id}”,即路由规则为"api/[controller]/{id}" 如果将id强制定义为整数则不会返回值,无法访问。
(3)[HttpGet("{id}", Name = “Get”)] 中的Name值,目前测试可以用于寻址,其它作用不明
string uri = Url.Link(“GetTest2”, id = 1);
返回http://localhost:5000/Get1/1

  1. 总结:[HttpGet("{id}", Name = “Get”)] 等同于于Route中带属性,其中的属性值可以相互参考
 类似资料: