我将路由OData问题与ASP.NET Core结合使用。我有以下课程
public class Publisher
{
public int Id { get; set; }
public string Name { get; set; }
public Category Category { get; set; }
}
public class Category
{
public int Id { get; set; }
public string Type { get; set; }
}
配置为
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseMvc(b =>
{
b.Select().Expand().Filter().OrderBy().MaxTop(100).Count();
b.MapODataServiceRoute(routeName: "myRoute", routePrefix: "odata", model: GetEdmModel());
});
}
private static IEdmModel GetEdmModel()
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Publisher>("Publisher");
builder.EntitySet<Category>("Category");
return builder.GetEdmModel();
}
当然还有控制器
public class PublisherController : ODataController
{
[EnableQuery]
public ActionResult<string> GetCategory()
{
return _db.Publishers.Select(p => p.Category);
}
[EnableQuery]
public ActionResult<string> GetCategory([FromODataUri] int key)
{
return Ok(_db.Publishers.Where(p => p.Id == key).Select(p => p.Category));
}
}
问题是,当我尝试使用特定ID发出GET请求时,例如
http://localhost:port/odata/Publisher(1)/Category
一切正常,我得到了结果,但是如果我想做
http://localhost:port/odata/Publisher/Category
我有404未找到异常
您有什么想法吗?
答案 0 :(得分:0)
米哈伊洛
这与OData Url约定有关。有关属性访问的Url约定,您可以参考http://docs.oasis-open.org/odata/odata/v4.01/cs01/part2-url-conventions/odata-v4.01-cs01-part2-url-conventions.html#_Toc505773205以获得详细信息。
http://...../Category
用于访问属性。基本上,我们可以从实体访问属性。 Publisher(1)
是键值为1的实体,而Publisher
是整个实体集。因此,http://localhost:port/odata/Publisher(1)/Category
是有效的OData Url路径,但是http://localhost:port/odata/Publisher/Category
无效。如果使用ODL Uri解析器解析无效路径,则会得到异常。
希望它可以提供帮助。