【发布时间】:2022-01-04 16:32:38
【问题描述】:
我正在尝试在我的项目中使用 OData。
我有这个类JournalCopy,它有ICollection<JournalItemCopy> Items 属性。我试图通过JournalCopy 得到这个Items,并且我想使用OData 来过滤和扩展结果。
这是我的行动:
[ODataRoutePrefix("JournalRepetitives")]
[Authorize(AuthenticationSchemes = TenantRequired.DefaultSchemeName)]
public class JournalRepetitivesController : ODataController
{
private readonly ReadModelContext _readModelContext;
public JournalRepetitivesController(ReadModelContext readModelContext)
{
_readModelContext = readModelContext;
}
private IQueryable<JournalCopy> JournalCopyQuery() => _readModelContext.Set<JournalCopy>();
[EnableQuery]
[HttpGet]
[ODataRoute("GetItems(Id={id})")]
public IQueryable<JournalItemCopy> GetItems([FromODataUri] string id)
{
return JournalCopyQuery().Where(e => e.Id == id)
.SelectMany(e => e.Items);
}
}
我有这个配置:
public static class ReadModelConfiguration
{
public static ODataModelBuilder Configure()
{
var builder = new ODataConventionModelBuilder();
builder.EntityType<JournalCopy>().HasKey(e => e.Id);
builder.EntityType<JournalItemCopy>().Collection.Function("GetItems")
.ReturnsCollectionFromEntitySet<JournalItemCopy>(nameof(JournalItemCopy))
.Parameter<string>("Id").Required();
}
}
所以当我使用 http://localhost:8000/v2/JournalRepetitives/GetItems(Id='76dee73f-8cd4-4311-9708-4701c3d2d017') 在邮递员中调用 Api 但我在控制器“JournalRepetitives”中的操作“GetItems”上得到路径模板“JournalRepetitives/GetItems(Id={id})”不是有效的 OData 路径模板。键段“id”的键模板值“GetItems(Id={id})”不以“{”开头或以“}”结尾。但我不知道它的问题。
有什么办法可以解决吗?
【问题讨论】:
标签: c# asp.net asp.net-core asp.net-web-api odata