中引用控制器操作的参考路由
如何实现以下方法?我有两个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正在工作。后者只有在不存在/删除的情况下才起作用。我如何将路线定向到具有特定标头值的方法。
谢谢!
使用路由约束
[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) {
//...
}
}
ASP.NET Core中的参考路由
在ASP.NET CORE
您可以使用控制器和操作中的属性配置路由。
[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”
动作的名称,因此是路由的名称。