【发布时间】:2017-09-11 20:45:13
【问题描述】:
我在同一个项目中让 WebApi 2 控制器与单个 OData 控制器并排工作。正在尝试设置所需的路由配置:
- 对 /api 的所有请求都应映射到此 ODataController
- 所有其他请求都应定向到普通的 Web Api 控制器
当我尝试像这样将 /api 路由映射到 OData 控制器时:
class WebApiConfig
{
public static void Register(HttpConfiguration configuration)
{
configuration.Routes.MapHttpRoute("API Default", "api/{action}/{id}",
new { controller = "ApiOdata", id = RouteParameter.Optional });
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Organization>("Organizations");
configuration.Routes.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: "Api",
model: builder.GetEdmModel());
}
}
所有方法调用对 Web Api 和 OData 控制器都可以正常工作,但像 /api/$metadata 这样的请求不起作用。
当我删除“API 默认”路由时 - 对 /api/Organizations 等 OData 控制器方法的请求停止工作(返回 404)但 /api/$metadata 开始.
详细的404错误信息:
<Error>
<Message>
No HTTP resource was found that matches the request URI 'http://localhost:53576/api/Organizations'.
</Message>
<MessageDetail>
No type was found that matches the controller named 'Organizations'.
</MessageDetail>
</Error>
将所有 OData 调用映射到单个控制器操作的正确方法是什么?
【问题讨论】:
标签: asp.net-mvc asp.net-web-api routing odata