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

时间:2019-02-21 11:31:30

标签: c# asp.net-core asp.net-core-mvc

如何实现以下方法? 我有两个具有以下参数值的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起作用。仅当前者不存在/删除时,后者才起作用。如何将我的路线定向到具有特定标头值的方法。

谢谢!

2 个答案:

答案 0 :(得分:2)

使用route constraints

[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) {
        //...
    }
}

引用Routing in ASP.NET Core

引用Routing to controller actions in ASP.NET Core

答案 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”是操作的名称,因此它是路由的名称。