Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何同时支持';常规';和';可读性';Web API中的URL属性错误?_C#_Url_Asp.net Web Api_Asp.net Web Api Routing_Routeattribute - Fatal编程技术网

C# 如何同时支持';常规';和';可读性';Web API中的URL属性错误?

C# 如何同时支持';常规';和';可读性';Web API中的URL属性错误?,c#,url,asp.net-web-api,asp.net-web-api-routing,routeattribute,C#,Url,Asp.net Web Api,Asp.net Web Api Routing,Routeattribute,我有一个启用了属性路由的ASP.NET Web API 2.1项目,控制器操作修饰如下: [Route("api/product/barcode/{barcodeType}/{barcode}")] public async Task<IHttpActionResult> GetProduct([FromUri] BarcodeSearchCriteria searchCriteria) 它适用于以下“常规”url: /api/product/barcode/EAN/0747599

我有一个启用了属性路由的ASP.NET Web API 2.1项目,控制器操作修饰如下:

[Route("api/product/barcode/{barcodeType}/{barcode}")]
public async Task<IHttpActionResult> GetProduct([FromUri] BarcodeSearchCriteria searchCriteria)
它适用于以下“常规”url:

/api/product/barcode/EAN/0747599330971
/api/product/barcode/?barcodeType=EAN&barcode=0747599330971
但如何同时支持这样的url:

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

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

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

尝试将管线参数设置为可选,如下所示

[Route("api/product/barcode/{barcodeType=""}/{barcode=""}")]
public async Task<IHttpActionResult> GetProduct([FromUri] BarcodeSearchCriteria searchCriteria)
[路径(“api/product/barcode/{barcodeType=”“}/{barcode=”“}”)]
公共异步任务GetProduct([FromUri]BarcodeSearchCriteria searchCriteria)
因此,它还应该与路线模板
api/产品/条形码
路线匹配


尚未测试,但希望您明白我的观点。

在这种情况下,您可能有两条路线:

[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)
[Route(“api/product/barcode”)]//需要查询字符串中的值
[路由(“api/product/barcode/{barcodeType}/{barcode}”)]//需要路由的值
公共异步任务GetProduct([FromUri]BarcodeSearchCriteria searchCriteria)

我仍然收到一个错误:“没有在控制器‘Product’上找到与请求匹配的操作。”即使有
ute(@“api/Product/barcode/{barcode类型=”“}/{barcode=“””}”)]
谷歌也没有给出如何为字符串参数properlyy指定默认值的建议您是对的,是否可以针对相同的操作装饰双路由属性,即在删除第二个属性中的可选装饰后,将[route(“api/product/barcode”)]也添加到相同的方法中。此外,为了测试,您是否可以指定空字符串({barcodeType=“a”}/{barcode=“b”})以外的任何可选字符串对照参数,检查它是否工作。这是嘲笑和奇怪的,但默认值对我来说都不起作用。它似乎是用来工作的,但不久前停止工作。现在我得到了相同的错误:“在控制器‘产品’上没有找到与请求匹配的操作”。当配置了1(默认)或2(也有操作)路由时。嗯。这应该可以…确保在配置中的常规路由之前注册了属性路由。这是因为任何与常规路由匹配的请求都无法到达属性控制器/操作。我的错误在于路由注册顺序。谢谢