我有一个并列的Web API2.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 (值)最终进入我的APIController而不是ODataController。
我如何使用不同的前缀,但是相同的名称,将它们路由到适当的控制器。我不希望每个路由都有一个不同的名称,如果我能防止它的话,前缀应该会处理所有的事情,但出于某种原因,它们不是。
发布于 2015-04-07 19:34:25
您需要指定ODataRoute
属性,即使该属性为空:
[ODataRoutePrefix("My")]
public class oMyController : ODataController {
[HttpGet]
[ODataRoute()] // <---<< This was the key to proper OData routing
public IHttpActionResult Get(ODataQueryOptions<FileModel> queryOptions) {
//Code Here
}
[HttpGet]
[ODataRoute("({mykey})")]
public IHttpActionResult Get([FromODataUri] String mykey) {
//Code Here
}
}
https://stackoverflow.com/questions/29499378
复制相似问题