有没有办法处理 asp.net core odata 错误?
我有一个模特班DimDateAvailable
具有一个属性,主键为int DateId
,然后我打电话/data/DimDateAvailable?$select=test
.
其他调用按预期工作并返回我想要的内容 - 这是故意生成错误的调用,但它失败了,因为模型上没有名为 test 的属性。响应按预期返回,如下所示:{"error":{"code":"","message":"The query specified in the URI is not valid. Could not find a property named 'test' on type 'DimDateAvailable'...
接下来是堆栈跟踪。
这个响应很好,当env.IsDevelopment()
is true
但我不想在不开发时公开堆栈跟踪。
我已经考虑过将代码包装在控制器中get
try-catch 中的方法,但我认为有一个操作过滤器对结果运行,因此它永远不会被调用。另一方面,我看不到在哪里注入任何中间件和/或添加任何过滤器来捕获错误。我怀疑可能有一种方法可以覆盖输出格式化程序来实现我想要的,但我不知道如何实现。
这是我目前所拥有的:
在 Startup.cs 中:
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<TelemetryDbContext>();
services.AddOData();
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc(routeBuilder =>
{
routeBuilder.MapODataServiceRoute("odata", "data", GetEdmModel());
routeBuilder.Select().Expand().Filter().OrderBy().MaxTop(null).Count();
// insert special bits for e.g. custom MLE here
routeBuilder.EnableDependencyInjection();
});
}
private static IEdmModel GetEdmModel()
{
var builder = new ODataConventionModelBuilder();
builder.EntitySet<DimDateAvailable>("DimDateAvailable");
return builder.GetEdmModel();
}
在遥测 DbContext.cs 中:
public virtual DbSet<DimDateAvailable> DimDateAvailable { get; set; }
在 DimDateAvailable.cs 中
public class DimDateAvailable
{
[Key]
public int DateId { get; set; }
}
我的控制器:
public class DimDateAvailableController : ODataController
{
private readonly TelemetryDbContext data;
public DimDateAvailableController(TelemetryDbContext data)
{
this.data = data;
}
[EnableQuery(AllowedQueryOptions = AllowedQueryOptions.Supported, PageSize = 2000)]
public IActionResult Get()
{
return Ok(this.data.DimDateAvailable.AsQueryable());
}
}
这是一个带有 Microsoft.AspNetCoreOData v7.0.1 和 EntityFramework 6.2.0 包的 asp.net core 2 Web 应用程序。