具有两个 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)
我正在使用 .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)