我正在尝试为我正在构建的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路由还不熟悉,所以我无法弄清楚参考问题中缺少什么。