我有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中使用它,然后才切换到'可读'模式。
答案 0 :(得分: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)
答案 1 :(得分:0)
看起来没有为查询字符串参数定义常规Url的路由。
尝试将路线参数设为可选,如下所示。
[Route("api/product/barcode/{barcodeType=""}/{barcode=""}")]
public async Task<IHttpActionResult> GetProduct([FromUri] BarcodeSearchCriteria searchCriteria)
因此它也应匹配路线模板api/product/barcode
路线。
没有经过测试,但希望你明白我的意思。