【发布时间】:2021-09-05 05:39:38
【问题描述】:
我正在尝试在现有的 ASP.NET (.net5) api 中构建一个非常简单的 odata 服务。
使用:
<PackageReference Include="Microsoft.AspNetCore.OData" Version="8.0.0-rc3" />
我认为它会很简单(我只需要支持 GET 和 Get-$count),但我一定遗漏了一些东西。
这是我所拥有的:
型号:
public partial class MySuspension
{
public long Id { get; set; }
[Required]
[StringLength(50)]
public string AccountName { get; set; }
[Column(TypeName = "datetime")]
public DateTime RegisteredDate { get; set; }
[StringLength(8)]
public string Responder { get; set; }
public long? UnblockPermissions { get; set; }
}
我正在为 db-access 使用实体框架,因此模型类是为 EF 生成的(因此有一些属性)。
启动:
这是“配置”方法的基本顺序:
app.UseMiddleware<GlobalExceptionHandlerMiddleware>();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseODataRouteDebug(); ///// <----
app.UseODataQueryRequest();///// <----
app.UseODataBatching();///// <----
app.UseCors("InternalApplications");
app.UseAuthentication();
app.UseRouting();
app.UseAuthorization();
app.UseRequestLocalization(app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>().Value);
UseSwagger(app);
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapHealthChecks("/health");
});
我像这样注册我的控制器:
var builder = new ODataConventionModelBuilder();
builder.EntitySet<MySuspension>("ActSus");
var model0 = builder.GetEdmModel();
services.AddControllers()
.AddOData(opt =>
{
opt.AddModel("data",model0)
.Count().Filter().Expand()
.Select().OrderBy()
.SetMaxTop(null);
});
上述设置非常适用于“普通”api 方法,因此不存在任何 auth/cors 问题。
控制器:
public class AccountActionController : ODataController
{
private readonly MyDbContext _dbContext;
public AccountActionController(MyDbContext dbContext)
{
_dbContext = dbContext;
}
[EnableQuery]
[HttpGet]
public IActionResult Get()
{
return Ok(_dbContext.AccountSuspensions);
}
}
据我了解,这应该可行。我从 OdataController 继承了 - 这(我认为)意味着我不需要使用任何其他属性。我认为即使是 HttpGet 和 EnableQuery 属性也可能是多余的。
当我运行它时,odata 路由调试页面显示 ~/data 和 ~/data/$metadata 作为唯一的 OData 端点。
~/data/$metadata 显示了一个正确的 XML 文档,它准确地定义了我的 MySuspension 对象。
AccountActionController 不会出现在 Odata 端点或非 Odata 端点中!!!
啊啊!!!郁闷!!!
我知道我是个白痴,但我一辈子都看不到我做错了什么。
任何帮助将不胜感激。
谢谢。
【问题讨论】:
标签: asp.net-core controller odata