如何实现以下方法? 我有两个具有以下参数值的HttpGet方法:-
[HttpGet("{id}")] int value for route
[HttpGet("{slug}")] string value for route
路由在控制器上看起来像这样:-
[Route("api/[controller]")
路由配置:-
app.UseMvc(routes =>
{
routes.MapRoute(
name: "defaultRoute",
template: "{controller=Posts}/{action=GetAsync}/{id?}");
});
如何确保基于路由值触发特定的HttpGet方法。在上述情况下,只有具有{id}路由的HttpGet起作用。仅当前者不存在/删除时,后者才起作用。如何将我的路线定向到具有特定标头值的方法。
谢谢!
答案 0 :(得分:2)
[Route("api/[controller]")
public class ValuesController : Controller {
//GET api/values/1
[HttpGet("{id:int}")] //int value for route
public IActionResult GetById(int id) {
//...
}
//GET api/values/something-else
[HttpGet("{slug}")] //string value for route
public IActionResult Get(string slug) {
//...
}
}
答案 1 :(得分:0)
您可以使用控制器中的属性和操作来配置路由。
[Route("api/[controller]")]
public class HomeController : BaseController
{
[HttpGet("[action]")]
public IActionResult Index() => View();
[HttpGet("[action]")]
public IActionResult Error() => View();
[HttpGet("[action]/{name}")]
public IActionResult Detail(string name)
{
return RedirectToAction(nameof(Index));
}
}
您可以看到两个标记[controller]
和[action]
表示我们必须引用已声明的控制器和操作名称。在这种情况下,“Home”
是控制器的名称,“Detail”
是操作的名称,因此它是路由的名称。