Xor*_*ist 9 c# odata asp.net-web-api asp.net-web-api-routing odata-v4
我有一个并排的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
}
}
Run Code Online (Sandbox Code Playgroud)
因此通过./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
}
}
Run Code Online (Sandbox Code Playgroud)
像这样提前定义odata路线:
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<MyModel>("My");
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: "odata",
model: builder.GetEdmModel()
);
Run Code Online (Sandbox Code Playgroud)
但尝试访问./odata/My和./odata/My(value)最终进入我的APIController而不是ODataController.
如何使用不同的前缀但使用相同的名称来路由这些前缀,并将它们转到相应的控制器.如果我可以阻止它,我不希望每条路线都有不同的名称,前缀应该照顾一切,但由于某种原因它们不是.
Xor*_*ist 13
哇我觉得有点傻.发布后20分钟我解决了.简短,我需要实际指定ODataRoute属性,即使它是空的,所以我的新ODataController,它确实有效,如下所示:
[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
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9774 次 |
最近记录: |