gpt4 book ai didi

c# - OData v4 路由前缀?

转载 作者:太空狗 更新时间:2023-10-29 17:43:12 26 4
gpt4 key购买 nike

我有一个并行的 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。

我如何使用不同的前缀但相同的名称来路由它们,并让它们转到适当的 Controller 。如果我能阻止的话,我不想为每条路线使用不同的名称,前缀应该处理所有事情,但由于某些原因它们不是。

最佳答案

您需要指定 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
}

}

关于c# - OData v4 路由前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29499378/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com