如何在 Web API 属性路由中同时支持 'regular' 和'readable' URL?



我 ASP.NET 启用了属性路由的 Web API 2.1 项目,以及如下所示的控制器操作:

[Route("api/product/barcode/{barcodeType}/{barcode}")]
public async Task<IHttpActionResult> GetProduct([FromUri] BarcodeSearchCriteria searchCriteria)

其中 BarcodeSearchCriteria 是一种复杂类型:

public class BarcodeSearchCriteria
{
    public string Barcode { get; set; }
    public string BarcodeType { get; set; }
}

它适用于这样的"常规"网址:

/api/product/barcode/EAN/0747599330971

但是如何同时支持这样的 URL:

/api/product/barcode/?barcodeType=EAN&barcode=0747599330971

在切换到"可读"模式之前,我曾经在我的 *.webtest 中使用它。

在这种情况下,

您可以有 2 条路由:

[Route("api/product/barcode")] //expects values from query string
[Route("api/product/barcode/{barcodeType}/{barcode}")] //expects value from route
public async Task<IHttpActionResult> GetProduct([FromUri] BarcodeSearchCriteria searchCriteria)

看起来没有为具有查询字符串参数的常规 URL 定义路由。

尝试像这样将路由参数设置为可选。

[Route("api/product/barcode/{barcodeType=""}/{barcode=""}")]
public async Task<IHttpActionResult> GetProduct([FromUri] BarcodeSearchCriteria searchCriteria)

因此,它还应与路由模板api/product/barcode匹配。

还没有测试过,但希望你明白我的意思。

相关内容

  • 没有找到相关文章

最新更新