Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
结合OData和.NET API开发Angular SPA应用程序_Angular_.net Core_Odata - Fatal编程技术网

结合OData和.NET API开发Angular SPA应用程序

结合OData和.NET API开发Angular SPA应用程序,angular,.net-core,odata,Angular,.net Core,Odata,我正在创建一个项目,该项目将有一个与.net核心Web Api项目对话的角度前端,使用OData提供丰富的查询。 我已经将OData Nuget包添加到我的angular项目中 我遵循了以下教程: 在myStartup.cs中 public void ConfigureServices(IServiceCollection services) { services.AddSpaStaticFiles(configuration => {

我正在创建一个项目,该项目将有一个与.net核心Web Api项目对话的角度前端,使用OData提供丰富的查询。 我已经将OData Nuget包添加到我的angular项目中

我遵循了以下教程:

在myStartup.cs中

public void ConfigureServices(IServiceCollection services)
{
    services.AddSpaStaticFiles(configuration =>
            {
                configuration.RootPath = "ClientApp/dist";
            });

    /* snipped some code about DbContext and AutoMapper, not relevant */
    services.AddMvcCore(action => action.EnableEndpointRouting = false)
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    services.AddOData();
    services.AddODataQueryFilter();
}

private static IEdmModel GetEdmModel()
{
     var builder = new ODataConventionModelBuilder();
     builder.EntitySet<Asset>("Assets");

     return builder.GetEdmModel();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
     app.UseStaticFiles();
     app.UseSpaStaticFiles();

     app.UseMvc(routes =>
     {
         routes.EnableDependencyInjection();

         routes.Select().Filter().OrderBy().Expand().Count().MaxTop(10);
         routes.MapODataServiceRoute("api", "api", GetEdmModel());

         routes.MapRoute(
                    name: "default",
                    template: "{controller}/{action=Index}/{id?}");
            });

            app.UseSpa(spa =>
            {
                // To learn more about options for serving an Angular SPA from ASP.NET Core,
                // see https://go.microsoft.com/fwlink/?linkid=864501

                spa.Options.SourcePath = "ClientApp";

                if (env.IsDevelopment())
                {
                    spa.UseAngularCliServer(npmScript: "start");
                }
            });
}

问题2

如果我将此代码再次添加到类中,则会发生以下情况:

呼叫?$count=true 应返回如下列表:

{
  "@odata.context": "https://localhost:44374/api/$metadata#Assets",
  "@odata.count": 2,
  "value": [
    {
      "Id": "9cef40f6-db31-4d4c-997d-8b802156dd4c",
      "Name": "Asset 1",
   },
    {
      "Id": "282be5ea-231b-4a59-8250-1247695f16c3",
      "Name": "Asset 2",
    }
  ]
}
但是,该端点返回:

[
    {
      "Id": "9cef40f6-db31-4d4c-997d-8b802156dd4c",
      "Name": "Asset 1",
   },
    {
      "Id": "282be5ea-231b-4a59-8250-1247695f16c3",
      "Name": "Asset 2",
    }
]

有人知道发生了什么或我做错了什么吗?

试着删除这行:

routes.EnableDependencyInjection();

尝试删除此行:

routes.EnableDependencyInjection();

现在我遇到了这个错误:“找不到非OData路由的服务容器。在非OData路由上使用OData组件时可能会发生这种情况,这通常是一个配置问题。调用EnableDependencyInjection()在非OData路由上启用OData组件。当ASP.NET核心路由层而不是OData路由层错误地处理请求时,也可能会发生这种情况,例如URL不包括通过调用MapODataServiceRoute()配置的OData路由前缀。因此我还尝试删除[route(“api/[controller]”)从我的控制器类,但url“/api/Assets/All”不再解决这些问题。我怀疑路由错误是问题的核心。如果删除默认Mvc路由,并从控制器类中删除RouteAttribute,则我的“/api/Assets/All”将不再解析,只加载整个angular应用程序。似乎行“MapODataServiceRoute(“api”,“api”,GetEdmModel())没有任何作用。我正面临着确切的问题!你有没有想过?我还注意到,例如,返回所有my对象,减去任何其他导航属性。但是,Objectors属性始终为空。现在我遇到以下错误:“找不到非OData路由的服务容器。在非OData路由上使用OData组件时可能会发生这种情况,这通常是一个配置问题。调用EnableDependencyInjection()在非OData路由上启用OData组件。当ASP.NET核心路由层而不是OData路由层错误地处理请求时,也可能会发生这种情况,例如URL不包括通过调用MapODataServiceRoute()配置的OData路由前缀。因此我还尝试删除[route(“api/[controller]”)从我的控制器类,但url“/api/Assets/All”不再解决这些问题。我怀疑路由错误是问题的核心。如果删除默认Mvc路由,并从控制器类中删除RouteAttribute,则我的“/api/Assets/All”将不再解析,只加载整个angular应用程序。似乎行“MapODataServiceRoute(“api”,“api”,GetEdmModel())没有任何作用。我正面临着确切的问题!你有没有想过?我还注意到,例如,返回所有my对象,减去任何其他导航属性。但是,“目标”属性始终为空。
routes.EnableDependencyInjection();