gpt4 book ai didi

具有多个命名空间的 ODataConventionModelBuilder

转载 作者:行者123 更新时间:2023-12-04 15:43:42 26 4
gpt4 key购买 nike

这要么是 super 直截了当,要么相对容易回答。我有以下代码来设置我的 OData 路由约定:

// OData
var builder = new ODataConventionModelBuilder();

// OData entity sets..
builder.EntitySet<Book>("Books");
builder.EntitySet<Shelf>("Shelves");

// Bound Function..has to be located on the Tables Controller...
builder.Namespace = "BookService";
builder.EntityType<Table>().Collection
.Function("MostRecent")
.Returns<DateTimeOffset>();

builder.Namespace = "ShelfService";
builder.EntityType<Shelf>()
.Action("NearestEmptyShelf");

...但是问题在于,当应用程序启动时,所有内容都针对 ShelfService 进行路由。而不是从 BookService.MostRecent 访问的第一个函数和 ShelfService.NearestEmptyShelf .

我确信其他人在为他们的 OData Controller 创建服务(操作/功能)时遇到了这个特殊问题。但我只是在明确回答您是否可以在 OData 路由集合中拥有多个命名空间?

最佳答案

您正在覆盖 builder.Namespace = "Bookservice"; 的命名空间与 builder.Namespace = "ShelfService"; .

要使用两个独立的命名空间,您需要两个独立的 new ODataConventionModelBuilder(); 实例。

以下是 OData V4

// Book OData Endpoint
var book_builder = new ODataConventionModelBuilder();

// Book OData entity sets..
book_builder.EntitySet<Book>("Books");

// Book Bound Function..has to be located on the Tables Controller...
book_builder.Namespace = "BookService";
book_builder.EntityType<Table>().Collection
.Function("MostRecent")
.Returns<DateTimeOffset>();
// Book Config
config.MapODataServiceRoute(
routeName: "OData - Book",
routePrefix: "book",
model: book_builder.GetEdmModel()
);

// Shelf OData Endpoint
var shelf_builder = new ODataConventionModelBuilder();

// Shelf OData Entity Sets
shelf_builder.EntitySet<Shelf>("Shelves");

// Shelf Bound Function..has to be located on the Tables Controller...
shelf_builder.Namespace = "ShelfService";
shelf_builder.EntityType<Shelf>()
.Action("NearestEmptyShelf");
.Returns<whatever you planned on returning>()
//Shelf Config
config.MapODataServiceRoute(
routeName: "OData - Shelf",
routePrefix: "shelf",
model: shelf_builder.GetEdmModel()
);

我已经有一段时间没有实现这个机制了,但你可能需要覆盖 AttributeRoutingConvention使用上述方法在多个命名空间/ Controller 中使用绑定(bind)函数。我知道我在某些时候遇到了麻烦,最终找到了一个解决堆栈溢出的好方法 public class CustomAttributeRoutingConvention : AttributeRoutingConvention使用了 public static class HttpConfigExt提供 CustomMapODataServiceRoute解决问题。

关于具有多个命名空间的 ODataConventionModelBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27688728/

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