C# 具有Dispose模式的MVC4 WebApi控制器Post操作导致发现多个操作异常
我想我已经发现了MVC4 WebApi控制器和Dispose模式的一个问题。问题在于操作后方法,响应是对异常的描述:C# 具有Dispose模式的MVC4 WebApi控制器Post操作导致发现多个操作异常,c#,asp.net-mvc-4,dispose,C#,Asp.net Mvc 4,Dispose,我想我已经发现了MVC4 WebApi控制器和Dispose模式的一个问题。问题在于操作后方法,响应是对异常的描述: Multiple actions were found that match the request: Void Post(System.String) on type MVC4Api.Controllers.ValuesController Void Dispose() on type MVC4Api.Controllers.ValuesController dispose模
Multiple actions were found that match the request:
Void Post(System.String) on type MVC4Api.Controllers.ValuesController
Void Dispose() on type MVC4Api.Controllers.ValuesController
dispose模式源于。我已将问题简化为下面的锅炉铭牌代码。值得指出的是,Get方法不会出现这个问题,我只是用Post方法确认了这一点。请通过发布到路径/api/values
进行尝试
public class ValuesController : ApiController
{
public void Post([FromBody]string value)
{
}
private bool _disposed;
protected override void Dispose(bool disposing)
{
if (_disposed)
{
return;
}
_disposed = true;
base.Dispose(disposing);
if (disposing)
{
// dispose of dependencies
}
}
public new void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
我的问题是如何调用Post方法?是什么导致了这个问题
编辑:
因为错误是关于路由的,所以我在控制路由的WebApiConfig下面添加了错误。这是在启动时在Global.asax中正常加载的,并且自启动新的WebApi项目以来没有更改
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
如果正确解释错误消息,则更容易理解解决方案:在选择请求时,WebApi操作选择器无法在
Dispose()
和Post()方法之间做出选择。(这本身似乎很愚蠢)。因此,错误实际上是要求我们帮助做出这个决定
我的首选选项是在Dispose()
Action方法上使用NonActionAttribute
类。这是对动作选择器的一个明确而透明的指令,它不考虑Debug方法来决定在何处路由请求。
[NonAction]
public new void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
另一个选项是将Dipose()
方法的访问器更改为protected
,但这并不明显。有什么问题需要回答吗?是的,我如何调用Post方法?为什么会发生这种情况?错误是说您有多个具有该签名的post操作。你发布的是整个班级吗?是整个班级。所涉及的路由配置只是在打开新的MVC4 WebApi项目时创建的现成配置。为了完整,我会把它贴出来。