【问题标题】:APS.NET MVC request routing using query parameter namesAPS.NET MVC 使用查询参数名称请求路由
【发布时间】:2022-12-05 16:59:57
【问题描述】:

我试图了解 ASP.NET MVC 中的属性路由。我了解路由如何匹配 url 元素,但不了解查询参数。

例如,假设我有一个可以根据书名或 ISBN 进行匹配的休息式图书查找服务。我希望能够执行类似 GET /book?title=MiddlemarchGET /book?isbn=978-3-16-148410-0 的操作来检索图书详细信息。

如何为此指定 [Route] 属性?我可以写:

[HttpGet]
[Route("book/{title}")]
public async Task<IActionResult> LookupTitle(string title)

但据我所知,这也匹配/book/Middlematch/book/978-3-16-148410-0。如果我还有一个带有 [Route("book/{isbn}")] 的 ISBN 查找端点,那么路由引擎将无法消除这两个端点的歧义。

那么如何通过查询参数名称来区分端点呢?

【问题讨论】:

    标签: asp.net-core asp.net-mvc-4


    【解决方案1】:

    以下Route() 属性将满足您的要求:

    [HttpGet] 
    // /book?title=Middlemarch 
    // /book?isbn=978-3-16-148410-0
    // /book?title=Middlemarch&isbn=978-3-16-148410-0 
    [Route("book/")] 
    public IActionResult LookupTitle(string isbn, string title)
    {
        if (isbn != null) { /* TODO */ }
        if (title != null) { /* TODO */ }
    
        return View();
    }
    

    当 ASP.NET MVC 解析器在路由模式中找不到任何匹配参数时,它会尝试将这些参数解释为查询参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 2020-04-25
      • 2014-09-11
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多