自定义OData路由无法解析

时间:2019-03-22 19:59:15

标签: c# asp.net-web-api odata

我正在尝试为我正在构建的Web API项目设置自定义OData路由。目的是希望能够通过路由传递参数来过滤结果。

该路由永远无法解决我的方法,当我尝试在浏览器中导航至该路由时,出现了404错误。

我遵循了this question接受答案底部的建议。

万一链接失效,那意味着我试图向我的ODataModelBuilder注册一个函数并将其设置为接受参数。

首先,我想在WebApiConfig.cs中注册一个函数,如所示示例。可以这样完成:

ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<myEntity>("Employees");

var function = builder.Function("GetByEmail");
function.Parameter<string>("Email");
function.ReturnsFromEntitySet<myEntity>("Employees");

config.MapODataServiceRoute(
    routeName: "ODataRoute",
    routePrefix: null,
    model: builder.GetEdmModel()
);

现在,我有一个要路由到的方法。在EmployeesController.cs内,我有以下方法:

[EnableQuery]
[ODataRoute("GetByEmail(Id={email})")]
public SingleResult<myEntity> GetByEmail([FromODataUri] string email)
{
    var test = email;  // I have a breakpoint sitting here to see if I ever get into the function.
    ...
}

我从来没有真正使用过此功能。

点击路由http://localhost:49707/GetByEmail(email=abc)时,出现.Net框架错误“'/'应用程序中的服务器错误”。

仅出于测试目的,当我碰到路由http://localhost:49707/GetByEmail时,我收到一条XML错误,内容为“找不到与请求URI匹配的HTTP资源”。

您可能会猜到,预期的结果是我可以获取此URI以正确路由到我的函数。

一旦进入此功能,我就可以执行所有需要执行的操作,但是我对OData路由还不熟悉,所以我无法弄清楚参考问题中缺少什么。

0 个答案:

没有答案