Перед добавлением OData в мой проект, мои маршруты, которые настроены следующим образом:
config.Routes.MapHttpRoute(
name: "ApiById",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new { id = @"^[0-9]+$" },
handler: sessionHandler
);
config.Routes.MapHttpRoute(
name: "ApiByAction",
routeTemplate: "api/{controller}/{action}",
defaults: new { action = "Get" },
constraints: null,
handler: sessionHandler
);
config.Routes.MapHttpRoute(
name: "ApiByIdAction",
routeTemplate: "api/{controller}/{id}/{action}",
defaults: new { id = RouteParameter.Optional },
constraints: new { id = @"^[0-9]+$" },
handler: sessionHandler
Все контроллеры предоставляют Get, Put (имя действия Create), Patch (имя действия - Update) и Delete. В качестве примера клиент использует эти различные стандартные URL-запросы для запросов CustomerType:
string getUrl = "api/CustomerType/{0}";
string findUrl = "api/CustomerType/Find?param={0}";
string createUrl = "api/CustomerType/Create";
string updateUrl = "api/CustomerType/Update";
string deleteUrl = "api/CustomerType/{0}/Delete";
Затем я добавил контроллер OData с теми же именами действий, что и мои другие контроллеры Api. Я также добавил новый маршрут:
ODataConfig odataConfig = new ODataConfig();
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: null,
model: odataConfig.GetEdmModel()
);
Пока я ничего не изменил на стороне клиента. Когда я отправляю запрос, я получаю ошибку 406 Not Available.
Перепутаны ли маршруты? Как я могу это решить?