这两种方法不是有效地实现了同一件事吗?
方法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
答案 0 :(得分:0)
它们相同,您错过了一些细节
在路由模式中将方括号[]
替换为大括号{}
,因为this way框架会评估路由模式:
endpoints.MapControllerRoute(name: "api", pattern: "api/{controller}")
然后从操作上方删除[HttpGet("{customer}")]
将动作添加到路由模式:
endpoints.MapControllerRoute(name: "api", pattern: "api/{controller}/{action}")
Voila,现在端点看起来恰到好处!