【发布时间】:2019-02-02 11:09:56
【问题描述】:
我有以下 web api 控制器:
public class ProductController : ProductControllerBase
{
public async Task<string> Lookup(string id)
{
// do lookup
}
public async Task<string> Search(string keywords)
{
// do search
}
}
对此 api 的示例请求:
http://localhost/api/product/Lookup?provider=amazon&id=B07CSPSMQY
http://localhost/api/product/Lookup?provider=walmart&id=4132478AB
http://localhost/api/product/Lookup?provider=ebay&id=EWRHNFKASDN231
我在基类中获取提供程序,因为我将它用于 IoC 目的:
public ProductControllerBase()
{
string provider = HttpContext.Current.Request.QueryString["provider"];
// resolve search provider depending on parameter
SetController(provider);
}
在我的 WebApiConfig 中,我有以下设置:
config.Routes.MapHttpRoute(
"ProductControllerLookup",
"api/product/Lookup/{provider}/{id}",
new
{
}
);
但是一旦我运行上面的 URL,我就会不断收到以下错误:
{"Message":"The requested resource does not support http method 'GET'."}
我想要的是获取“提供者”以外的参数,因为我不想将它用于所有方法。
如何配置这个?
【问题讨论】:
-
您是否尝试在操作上显式添加属性 Get? ` [System.Web.Http.HttpGet] public async Task
Lookup(string id) { // 查找返回 ""; }` -
如果我只发送 id 参数而不发送提供者,它会命中该方法。但是,如果我同时发送 id 和 provider,我会在上面遇到错误。
标签: c# asp.net-mvc routing asp.net-web-api2