【问题标题】:OData with ABP only returns 404 for entities带有 ABP 的 OData 仅为实体返回 404
【发布时间】:2019-10-21 18:18:37
【问题描述】:

我正在使用 ABP 和 OData 开发一个 .NET Core 2.2 Web 应用程序,并且我关注了 this guide。设置好之后,我可以查询http://localhost:21021/odata,得到如下结果:

{"result":{"entitySets":[{"url":"Empresas","name":"Empresas","title":null,"typeAnnotation":null},{"url":" Users","name":"Users","title":null,"typeAnnotation":null}],"singletons":[],"functionImports":[],"typeAnnotation":null},"targetUrl": null,"success":true,"error":null,"unAuthorizedRequest":false,"__abp":true}

但我对实体尝试的任何操作,例如点击 http://localhost:21021/odata/Empresas,只会导致 404。

可能是什么问题?

Startup.cs

    public IServiceProvider ConfigureServices(IServiceCollection services)
    {
        // MVC
        services.AddMvc(
            options => options.Filters.Add(new CorsAuthorizationFilterFactory(_defaultCorsPolicyName))
        );

        services.AddOData();

        // Workaround: https://github.com/OData/WebApi/issues/1177
        services.AddMvcCore(options =>
        {
            foreach (var outputFormatter in options.OutputFormatters.OfType<ODataOutputFormatter>().Where(_ => _.SupportedMediaTypes.Count == 0))
            {
                outputFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/prs.odatatestxx-odata"));
            }
            foreach (var inputFormatter in options.InputFormatters.OfType<ODataInputFormatter>().Where(_ => _.SupportedMediaTypes.Count == 0))
            {
                inputFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/prs.odatatestxx-odata"));
            }
        });

        IdentityRegistrar.Register(services);
        AuthConfigurer.Configure(services, _appConfiguration);
        // ... SignalR, CORS, Swagger, etc ...

        return services.AddAbp<EcfWebHostModule>(
            // Configure Log4Net logging
            options => options.IocManager.IocContainer.AddFacility<LoggingFacility>(
                f => f.UseAbpLog4Net().WithConfig("log4net.config")
            )
        );

    public void Configure(IApplicationBuilder app)
    {
        app.UseAbp(options => { options.UseAbpRequestLocalization = false; }); // Initializes ABP framework.

        // ... UseCors, UseStaticFiles, UseAuthentication, UseAbpRequestLocalization, UseSignalR ...

        app.UseOData(builder =>
        {
            builder.EntitySet<EmpresaEntity>("Empresas").EntityType.Expand().Filter().OrderBy().Page();
            builder.EntitySet<User>("Users").EntityType.Expand().Filter().OrderBy().Page();
        });

        app.UseUnitOfWork(options =>
        {
            options.Filter = httpContext =>
            {
                return httpContext.Request.Path.Value.StartsWith("/odata");
            };
        });

        // ... Swagger ...

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

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

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

EmpresaController.cs

public class EmpresaController : AbpODataEntityController<EmpresaEntity>, ITransientDependency
{
    public EmpresaController(IRepository<EmpresaEntity> repository)
        : base(repository)
    {

    }
}

EmpresaEntity.cs

public sealed class EmpresaEntity : FullAuditedEntity
{
    public string Cnpj { get; set; }
    public string Nome { get; set; }
}

【问题讨论】:

  • 你能得到元数据吗? http://localhost:21021/odata/$metadata
  • 是的,我可以。我还实现了一个过滤器来不包装响应。所以,正如预期的那样,我可以得到一个包含所有实体的 XML 文件。
  • 我认为这是一个路由问题。

标签: c# asp.net-core odata aspnetboilerplate


【解决方案1】:

终于解决了。

只需更改控制器的名称以匹配在启动类中作为参数传递的字符串。从文档中并不清楚它是如何工作的。

builder.EntitySet<EmpresaEntity>("Empresas").EntityType.Expand().Filter().OrderBy().Page();

EmpresasController

【讨论】:

    猜你喜欢
    • 2017-08-28
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多