如何定义单个操作来处​​理来到此控制器的所有http GET请求?

时间:2012-06-03 18:18:03

标签: asp.net-mvc asp.net-mvc-routing asp.net-web-api

这是路线定义:

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中使用何种查询字符串?

1 个答案:

答案 0 :(得分:0)

您可以使用WebAPI重置Get:

public string Get(int p) {}
public string Get(string data) {}

虽然这排除了你没有传递任何参数的情况,但根据我对你的场景的理解,应该应用任何一种方法(名称或值),所以这应该没问题。