【问题标题】:How to use HttpGet Method with two different parameter value如何使用具有两个不同参数值的 HttpGet 方法
【发布时间】:2019-02-21 11:31:30
【问题描述】:

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

    使用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

    【讨论】:

      【解决方案2】:

      您可以使用控制器和操作中的属性来配置路由。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-28
        • 1970-01-01
        相关资源
        最近更新 更多