如何使用具有两个不同参数值的HTTPGET方法



如何实现以下方法?我有两个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”动作的名称,因此是路由的名称。

最新更新