Odata使用jquery get返回404错误

Odata使用jquery get返回404错误,jquery,asp.net-web-api,odata,Jquery,Asp.net Web Api,Odata,我正在尝试配置一些odata导航,但看不出这里有什么问题 配置: public class WebApiConfig { public static void Register(HttpConfiguration config) { ODataModelBuilder modelBuilder = new ODataConventionModelBuilder(); var entitySetConfigur

我正在尝试配置一些odata导航,但看不出这里有什么问题

配置:

public class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
            var entitySetConfiguration = modelBuilder.EntitySet<Catalog>("Catalog");
            entitySetConfiguration.EntityType.Ignore(t => t.OutboundCatalogItems);
            entitySetConfiguration.EntityType.Ignore(t => t.OutboundColumns);
            entitySetConfiguration.EntityType.Ignore(t => t.OutboundProcessor);
            entitySetConfiguration.EntityType.Ignore(t => t.OutboundProcessorID);
            entitySetConfiguration.EntityType.Ignore(t => t.RelationshipId);
            entitySetConfiguration.EntityType.Ignore(t => t.CatalogConfigurationProperties);
            var model = modelBuilder.GetEdmModel();
            config.Routes.MapODataRoute("ODataRoute", "odata", model);

            config.EnableQuerySupport();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "apicontrollers/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
                );
        }
    }
控制器

public class CatalogController : EntitySetController<Catalog, int>
    {
        private readonly PDBCoreUnitOfWork _unitOfWork;

        public CatalogController()
        {
            _unitOfWork = new PDBCoreUnitOfWork(0);
        }

        public override IQueryable<Catalog> Get()
        {
            return _unitOfWork.Repository<Catalog>().Query().Get();
        }

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

public类WebApiConfig
{
公共静态无效寄存器(HttpConfiguration配置)
{
ODataModelBuilder modelBuilder=新ODataConventionModelBuilder();
//var entitySetConfiguration=modelBuilder.EntitySet(“目录”);
//entitySetConfiguration.EntityType.Ignore(t=>t.OutboundCatalogItems);
//entitySetConfiguration.EntityType.Ignore(t=>t.OutboundColumns);
//entitySetConfiguration.EntityType.Ignore(t=>t.OutboundProcessor);
//entitySetConfiguration.EntityType.Ignore(t=>t.OutboundProcessorID);
//entitySetConfiguration.EntityType.Ignore(t=>t.RelationshipId);
//entitySetConfiguration.EntityType.Ignore(t=>t.CatalogConfigurationProperties);
var model=modelBuilder.GetEdmModel();
//config.maphttpAttribute路由();
config.Routes.MapODataRoute(“odata”,“odata”,model);
config.EnableQuerySupport();
//config.Routes.MapHttpRoute(
//名称:“DefaultApi”,
//routeTemplate:“api/{controller}/{id}”,
//默认值:新建{id=RouteParameter.Optional}
//    );
}
}
键入localhost/port/odata返回:

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<service xmlns="http://www.w3.org/2007/app" xmlns:atom="http://www.w3.org/2005/Atom" xml:base="http://localhost:45837/odata">
<workspace>
<atom:title type="text">Default</atom:title>
</workspace>
</service>
此XML文件似乎没有任何与之关联的样式信息。文档树如下所示。
违约

但当我在odata之后添加
目录时,它抛出404 not found。仍然迷路,但仍在进步。

我需要交换注册顺序

public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            GlobalConfiguration.Configure(WebApiConfig.Register);
        }

        protected void Application_EndRequest(object sender, EventArgs e)
        {
            Helpers.DataAccess.DisposePDBUnitOfWork();
        }
    }
protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            GlobalConfiguration.Configure(ODataConfig.Register);
        }
改变了这个

public class CatalogController : EntitySetController<Catalog, int>
    {
       ....
    }

EntitySetController和AsyncEntitySetController在新的WebAPI版本中被删除。始终可以使用“
public class{EntitySetName}控制器:ODataController
作为控制器

顺便说一下,您可以参考以下博客了解WebApi 2.2与OData V4的新用法:


您将路由配置为:
apicontrollers/…
而不是
odata/…
我认为该部分是告诉路由您的api在哪个部分,如果您有一个api控制器和MVC控制器同名,会发生什么?哦,源代码已经按照我的方式设置了它,路由指向他的api文件夹。不,它是WebAPI的每个路由之前的前缀,您可以将其更改为
odata
,它将正常工作。使用
api/..
odata/..
进行了尝试,但仍然收到404错误。路由如何知道我的api控制器位于
ApiControllers/CatalogController.cs
的路径中开始时,除去webapi之外的所有内容后,它工作了。必须将控制器的扩展名更改为
OdataController
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<service xmlns="http://www.w3.org/2007/app" xmlns:atom="http://www.w3.org/2005/Atom" xml:base="http://localhost:45837/odata">
<workspace>
<atom:title type="text">Default</atom:title>
</workspace>
</service>
protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            GlobalConfiguration.Configure(ODataConfig.Register);
        }
public class CatalogController : EntitySetController<Catalog, int>
    {
       ....
    }
public class CatalogController : OdataController
    {
       ....
    }