以下作品:
public class UsageController : ApiController
{
public int GetMilk(string param1, string param2)
{
return -1;
}
public string GetBilling(string param1)
{
return null;
}
}
但是下面会抛出“找到与请求匹配的多个操作”Exception?!?!
public class UsageController : ApiController
{
public int GetMilk(MilkVM vm)
{
return -1;
}
public string GetBilling(BillingVM vm)
{
return null;
}
}
我该如何解决这个问题?
答案 0 :(得分:0)
默认情况下,ASP.NET Web API会根据HTTP谓词和操作方法参数选择操作方法。在第二种情况下,您有两个可以处理GET的操作方法,每个方法都有一个参数。当Web API尝试为您的GET查找操作方法(更多信息here)时,它将找到这两种方法。
如果必须具有这些操作方法,则可以遵循RPC样式的URI。像这样在WebApiConfig.cs中添加映射。
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "RpcStyle",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
然后,使用如下所示的操作方法对URI进行GET:http://localhost:port/api/usage/getmilk?a=1&b=2
。
顺便说一下,默认情况下,您的操作方法无法将查询字符串绑定到复杂类型。使用FromUri
这样的属性:public int GetMilk([FromUri]MilkVM vm)
。 GET请求必须没有请求体,因此默认情况下不会绑定复杂类型。