Я занимаюсь разработкой веб-приложения .NET Core 2.2 с использованием ABP и OData, и я следовал этому руководству . После настройки всего я могу запросить http://localhost:21021/odata
и получить следующий результат:
{"result": {"entitySets": [{"url": "Empresas", "name":"Empresas", "название": NULL, "typeAnnotation": нулевая}, { "URL": "Пользователи", "имя": "Пользователи", "название": нулевой "typeAnnotation": нулевая}], "одиночки": []," functionImports ": []," typeAnnotation ": NULL}," targetUrl ": NULL," успех ": правда," ошибка ": NULL," unAuthorizedRequest "ложь" __ ABP ": правда}
Но все, что я пытаюсь сделать со своими сущностями, например, нажимаю 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; }
}