我 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
匹配。
还没有测试过,但希望你明白我的意思。