以下OData配置引发错误消息:" ...找不到该段的资源..."。
var builder = new ODataConventionModelBuilder
{
Namespace = "Company",
ContainerName = "CompanyContainer"
};
builder.EntitySet<ModelA>("AModels");
builder.EntitySet<ModelB>("BModels");
builder.EntitySet<ModelC>("CModels");
// EDIT register GlobalStats as a ComplexType
builder.ComplexType<GlobalStats>();
builder.Function("Functions.GlobalStats").Returns<GlobalStats>();
var edmModel = builder.GetEdmModel();
config.MapODataServiceRoute(routeName: "Default", routePrefix: "odata", model: edmModel);
和控制器:
public class GlobalController : CompanyController
{
[HttpGet]
[ODataRoute("Company.Functions.GlobalStats")]
public async Task<IHttpActionResult> GetGlobalStats()
{
var stats = await Company.GlobalStats.GetAsync();
return Ok(stats);
}
}
我们的想法是拥有如下所示的端点:
http://api.company.com/odata/Company.Functions.GlobalStats
请帮我弄清楚这个配置中缺少什么。
编辑#1
我还尝试将GlobalStats
注册为ComplexType。仍然没有运气。
编辑#2
以下是确切的错误消息:
类型的例外 &#39; System.InvalidOperationException&#39;发生在System.Web.OData.dll中 但未在用户代码中处理。
其他信息:路径模板 &#39; Company.Functions.GlobalStats&#39;关于行动&#39; GetGlobalStats&#39;在 控制器&#39; Global&#39;不是有效的OData路径模板。资源没有 找到了细分&#39; Company.Functions.GlobalStats&#39;。
答案 0 :(得分:0)
定义未绑定的函数:
modelBuilder.Function("Company.Functions.GlobalStats").Returns<GlobalStats>();
映射你的odata路线:
config.MapODataServiceRoute("ODataRoute", "odata", model);
在控制器中为方法定义路由属性:
[HttpGet]
[ODataRoute("Company.Functions.GlobalStats")]
public async Task<IHttpActionResult> GetGlobalStats()
{
// your code
}
答案 1 :(得分:0)
调用未绑定函数应该只在服务根之后使用未绑定的函数名,而不管名称空间。