忽略 ASP.NET MVC WebAPI 中的路由参数
Ignoring route parameters in ASP.NET MVC WebAPI
我有以下网络 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
我正在获取基础 class 中的提供程序,因为我将它用于 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" 以外的参数,因为我不想将它用于所有方法。
如何配置这个?
我已经通过添加 [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 "";
}
我正在使用您的 url,所有这些都在使用方法,ID 和提供者都已填满。
我有以下网络 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
我正在获取基础 class 中的提供程序,因为我将它用于 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" 以外的参数,因为我不想将它用于所有方法。
如何配置这个?
我已经通过添加 [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 "";
}
我正在使用您的 url,所有这些都在使用方法,ID 和提供者都已填满。