.NET Core 3.0路由-常规或属性

时间:2019-11-15 20:23:20

标签: asp.net-core-webapi

这两种方法不是有效地实现了同一件事吗?

方法1(又称“常规路由”)

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
        endpoints.MapControllerRoute(name: "api", pattern: "api/[controller]");
        endpoints.MapRazorPages();
    });

现在,禁用/注释上面调用MapControllerRoute的行,然后在控制器中执行以下操作,在顶部添加基于attibute的路由。

方法2,又称“基于属性的路由”

    [ApiController]
    [Route("api/Box")]
    public class BoxController : BaseController
    {
            [HttpGet("{customer}")]
            public IActionResult Get(string customer, string size, string color)
            {
                //string customer = "test";

                string retval = "test"; //...do stuff here

                return Ok(retval);
            }
}

使用方法1,以下路线已解决
本地主机:5511 / box / abc?size = val1&color = val2
但不是
本地主机:5511 / api / box / abc?size = val1&color = val2

使用基于属性的路由,我需要的路由已解决
本地主机:5511 / api / box / abc?size = val1&color = val2

1 个答案:

答案 0 :(得分:0)

它们相同,您错过了一些细节

  1. 在路由模式中将方括号[]替换为大括号{},因为this way框架会评估路由模式:

    endpoints.MapControllerRoute(name: "api", pattern: "api/{controller}")

  2. 然后从操作上方删除[HttpGet("{customer}")]

  3. 将动作添加到路由模式:

    endpoints.MapControllerRoute(name: "api", pattern: "api/{controller}/{action}")

Voila,现在端点看起来恰到好处!