Skip to main content
 首页 » 编程设计

c#之具有两个 PUT 方法的 Web API Controller 抛出 InvalidOperationException

2024年01月24日26unruledboy

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

我有一个使用这种方法的 Controller :

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" }); 

但现在我在同一个 Controller 上有另一个方法(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) 
{ 

我做错了什么?

这些方法有不同的名称。

请您参考如下方法:

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)