Я пытаюсь настроить собственный маршрут OData для проекта Web API, который я создаю.Намерение состоит в том, что я хотел бы иметь возможность передавать параметр через маршрут для фильтрации результатов.
Маршрут никогда не разрешается в моем методе, я получаю ошибку 404, когда пытаюсь перейти к немув браузере.
Я последовал предложению внизу принятого ответа для на этот вопрос .
Если ссылка не работает, это означает, что я попытался зарегистрироватьсядля функции 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 Frameworkошибка «Ошибка сервера в« / »приложении».
Просто для тестирования, когда я попадаю на маршрут http://localhost:49707/GetByEmail
, я получаю XML-сообщение об ошибке «Не найден ресурс HTTP, соответствующий URI запроса».
Как вы можете догадаться, ожидаемый результат заключается в том, что я могу заставить этот URI правильно направить свою функцию.
Я могу выполнять все необходимые операции, как только я попадаю в эту функцию, но я новичок в маршрутизации OData, и я просто не могу понять, чего мне не хватает в контрольном вопросе.