【问题标题】:Odata receiving "The controller for path was not found or does not implement IController"Odata 接收“路径的控制器未找到或未实现 IController”
【发布时间】:2013-11-30 07:40:32
【问题描述】:

我对 Odata 和 Web Api 有点陌生。我从 Fiddler 中的 get 请求中收到此错误:

路径“/odata/Unit”的控制器未找到或未实现 IController

public class UnitController : EntitySetController<Unit, Guid>
{
    public DEVEntities _Context { get; set; }

    public UnitController()
    {
        this._Context = new DEVEntities();
    }

    public override IQueryable<Unit> Get()
    {
        return _Context.UnitSet;
    }

    protected override void Dispose(bool disposing)
    {
        base.Dispose(disposing);
        _Context.Dispose();
    }
}

我的 WebApiConfig.cs

    public static void Register(HttpConfiguration config)
    {
        ODataModelBuilder builder = new ODataModelBuilder();
        builder.EntitySet<Unit>("Units");
        config.Routes.MapODataRoute("odata", "odata", builder.GetEdmModel());

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }

I can get http://server/odata/$metadata with no problems but when I try:

but when I try http://server/odata/Unit I get:

[HttpException]: The controller for path &#39;/odata/Unit&#39; was not found or does  not implement IController.
   at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)
    at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName)
   at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory)
   at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state)
   at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state)
   at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

请帮助我变得非常沮丧。

【问题讨论】:

    标签: c# asp.net-mvc odata


    【解决方案1】:

    我以为你的 UnitController 或 EntitySetController 没有继承 ApiController

    【讨论】:

      【解决方案2】:

      我找到了答案,我必须将 ODataModelBuilder 更改为 ODataConventionModelBuilder。

      这解决了问题。

      并且应该将“Units”更改为“Unit”以映射到正确的控制器。

      【讨论】:

        猜你喜欢
        • 2016-11-26
        • 1970-01-01
        • 2012-12-10
        • 2013-05-31
        • 1970-01-01
        • 1970-01-01
        • 2020-07-20
        • 1970-01-01
        相关资源
        最近更新 更多