具有两个PUT方法的Web API控制器抛出InvalidOperationException

时间:2015-03-11 08:37:16

标签: c# asp.net asp.net-web-api asp.net-web-api-routing

我正在使用.NET Framework 4.5.1和C#开发ASP.NET Web Api 2.2应用程序。

我有一个使用此方法的控制器:

public HttpResponseMessage Get(
    string productCode,
    byte codeLevel,
    string productionOrderName,
    string batchName,
    string lineName,
    int quantity)
{

这就是我在WebApiConfig上配置路线的方式:

config.Routes.MapHttpRoute(
    name: "ExternalCodesActionApi",
    routeTemplate: "api/ExternalCodes/{action}/{productCode}/{codeLevel}/{productionOrderName}/{batchName}/{lineName}/{quantity}",
    defaults: new { controller = "ExternalCodes" });

但现在我在同一个控制器上有另一种方法(ExternalCodesController):

[HttpPut]
public HttpResponseMessage SetCodesAsUsed(List<string> codes)
{

但是,通过这条路线,当我使用该方法( http://myHost:53827/api/ExternalCodes/SetCodesAsUsed )时,我会收到InvalidOperationException的消息:

  

&#34;找到了与请求相匹配的几项行动:

  SetCodesAsUsed in type   MyProject.Web.API.Controllers.ExternalCodesController

  SetCodesAsUn用于类型   MyProject.Web.API.Controllers.ExternalCodesController&#34;,

同一ExternalCodesController中还有另一种方法:

[HttpPut]
public HttpResponseMessage SetCodesAsUnUsed(List<string> codes)
{

我做错了什么?

这些方法有不同的名称。

1 个答案:

答案 0 :(得分:7)

web api并没有太注意方法名称 - 它只是看到两个具有相同签名的PUT。

Web API 2 Attribute Routing是解决此问题的最方便的解决方案,因为它可以轻松地在RESTful API中混合使用RPC调用

例如:

[HttpPut]
[Route("api/ExternalCodes/SetCodesAsUnUsed")]
public HttpResponseMessage SetCodesAsUnUsed(List<string> codes)

[HttpPut]
[Route("api/ExternalCodes/SetCodesAsUsed")]
public HttpResponseMessage SetCodesAsUsed(List<string> codes)