我正在使用.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)
{
我做错了什么?
这些方法有不同的名称。
答案 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)