C# 具有Dispose模式的MVC4 WebApi控制器Post操作导致发现多个操作异常

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模

我想我已经发现了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模式源于。我已将问题简化为下面的锅炉铭牌代码。值得指出的是,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项目时创建的现成配置。为了完整,我会把它贴出来。