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

Web API controller with two PUT methods throw an InvalidOperationException

我正在使用 .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 消息:

"Several actions that matched the request were found:

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

SetCodesAsUnUsed in type MyProject.Web.API.Controllers.ExternalCodesController",

同样还有一个方法ExternalCodesController:

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

我做错了什么?

这些方法有不同的名称。

网络 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)