1

这是路由定义:

routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{*data}",
            defaults: new { data= RouteParameter.Optional }
        );

现在,在产品控制器中,我定义了一个动作,如下所示:

public string Get(string data="")
{
    return "value";
}

http-get使用以下 URL进行测试

api/product/   
api/product/apple

两者都在工作

但是,如果我使用这个 URL

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 中使用哪种查询字符串,是否有一种方法可以定义单个操作来处​​理到达此控制器的所有请求?

4

1 回答 1

0

您可以使用 WebAPI 重载 Get:

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

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

于 2012-06-06T17:31:49.483 回答