我有以下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'."}
我想要的是获取除“ provider”以外的参数,因为我不想将其用于所有方法。
我该如何配置呢?
答案 0 :(得分:1)
我已经通过添加[HttpGet]属性测试了代码,这似乎还可以,这是我的WebApiConfig
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
"ProductControllerLookup",
"api/product/Lookup/{provider}/{id}",
new {}
);
}
这是方法:
[System.Web.Http.HttpGet]
public async Task<string> Lookup(string id)
{
var temp = HttpContext.Current.Request.QueryString["provider"];
// do lookup
return "";
}
我正在使用您的网址,所有这些都点击了方法,并且id和provider都已填充。