Web API控制器中的多个GET方法

时间:2015-09-07 09:52:01

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

使用Web API时遇到了从客户端调用GET方法的情况。

//This didn't worked
public IEnumerable<type> Get(string mode)
{
    //Code
}

//This worked
public IEnumerable<type> Get(string id)
{
    //Code
}

只需更改参数名称即可使我的呼叫成功。我正在使用默认路线。

该方法的问题是什么?如果我想要一个带有多个参数的GET方法怎么办?例如:

pulbic string GET(string department, string location)
{
    //Code here
}

1 个答案:

答案 0 :(得分:1)

我需要看到调用代码和路由配置是确定的,但我的猜测是你可能正在使用restful routing。切换到使用带有命名参数的查询字符串,所有方法都应该有效:

http://api/yourcontroller?id=something

http://api/yourcontroller?mode=somethingelse

http://api/yourcontroller?department=adepartment&location=alocation

默认路由模板配置了解id。您可以在WebApiConfig静态类方法Register的App_Start文件夹中看到这一点。

这是默认值:

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

基于此默认值,操作方法参数(id)被设置为路径数据的一部分,这就是上面列出的控制器代码中的第二个操作方法可以工作的原因。您将无法使用模板路由或属性路由来为同一控制器中的多个单参数get方法设置get值,因为它会产生不明确的条件。

您可能希望在以下链接中查看有关参数绑定的详细信息。在Web Api 2中,绑定有时会有点棘手,因为默认情况下包含的模型绑定器和格式化程序会在幕后进行大量工作。

http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api