这是路线定义:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{*data}",
defaults: new { data= RouteParameter.Optional }
);
现在,在产品控制器中,我有一个如下定义的操作:
public string Get(string data="")
{
return "value";
}
我使用以下网址测试http-get
api/product/
api/product/apple
两者都在运作
但是,如果我使用此网址
api/product/?p=5
它会抛出异常
No action was found on the `controller` 'product' that matches the request.
我知道我可以定义这样的另一个动作来解决问题
public string Get(int p,string data="")
{
return "value";
}
但是,这对我不起作用,因为url
上的参数是不可预测的,无论是参数的名称还是参数的值。
所以,我的问题是
是否有办法定义单个操作来处理来到此控制器的所有http-get
请求,无论URL中使用何种查询字符串?
答案 0 :(得分:0)
您可以使用WebAPI重置Get:
public string Get(int p) {}
public string Get(string data) {}
虽然这排除了你没有传递任何参数的情况,但根据我对你的场景的理解,应该应用任何一种方法(名称或值),所以这应该没问题。