0

我有启用属性路由的 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

但如何同时支持这样的网址:

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

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

4

2 回答 2

1

在这种情况下,您可能有 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)
于 2014-02-15T18:19:34.430 回答
0

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

尝试像这样使路由参数可选。

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

所以它也应该匹配路由模板api/product/barcode路由。

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

于 2014-02-15T07:08:01.290 回答