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

Multiple GET methods in a Web API Controller

在使用 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
}

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

http://api/yourcontroller?id=something

http://api/yourcontroller?mode=somethingelse

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

默认路由模板配置理解 id。您可能会在 WebApiConfig static class 方法 Register.App_Start 文件夹中看到它。

这是默认值:

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

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

您可能想在下面 link 查看有关参数绑定的详细信息。在 Web 中绑定有时会有点棘手 Api 2 因为默认包含的模型绑定器和格式化程序在幕后做了很多工作。

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