我有一个并排的 Web API 2.2 APIController 和 OData v4 ODataController。我的 APIController 在内部使用这样的路由属性(没有预定义的路由默认值):
[RoutePrefix("api")]
public class MyController : ApiController
{
[HttpGet]
[Route("My")]
public IHttpActionResult Get()
{
//Code Here
}
[HttpGet]
[Route("My")]
public IHttpActionResult Get([FromUri] String mykey)
{
//Code Here
}
}
因此通过 ./api/My 和 ./api/My/?mykey=value 路由到
我已经尝试设置我的 ODataController 以遵循类似的诉讼:
[ODataRoutePrefix("My")]
public class oMyController : ODataController {
[HttpGet]
public IHttpActionResult Get(ODataQueryOptions<FileModel> queryOptions) {
//Code Here
}
[HttpGet]
[ODataRoute("({mykey})")]
public IHttpActionResult Get([FromODataUri] String mykey) {
//Code Here
}
}
像这样提前定义odata路由:
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<MyModel>("My");
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: "odata",
model: builder.GetEdmModel()
);
但尝试访问 ./odata/My 和 ./odata/My(value) 最终会进入我的 APIController 而不是 ODataController。
我如何使用不同的前缀但名称相同来路由这些,并将它们转到适当的控制器。如果我可以阻止它,我不想为每条路线使用不同的名称,前缀应该处理所有事情,但由于某种原因它们不是。