我想我发现 MVC4 WebApi 控制器与 Dispose Pattern 结合使用存在问题。问题在于 Post Action 方法,响应是对异常的描述:
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方法确认过。请通过 Posting to the path 尝试一下/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 }
);
}
}