Function 名称为 GetCollection

时间:2022-04-17 07:57:29

routePrefix路由前缀,必需含有Odata字符串,否则路由不到Odata控制器。

V1暗示版本,可以使用这种方法进行版本控制,也可以使用其他方法。

config.Count().Filter().OrderBy().Expand().Select().MaxTop(null);这样配置使Odata操纵符可用(Web Api2的旧版本不必如此设置)。

public static class WebApiConfig { public static void Register(HttpConfiguration config) { //odata路由 config.MapODataServiceRoute( routeName: "V1OdataRouteVersioning", routePrefix: "Odata/V1", model: GetEdmModel()); config.Count().Filter().OrderBy().Expand().Select().MaxTop(null); config.AddODataQueryFilter(); } }

EDM模型配置

实体名称为Collection,控制器名称为CollectionsV1Controller,Action名称为AddCollectioncollectionBM为要领参数名称。Function名称为GetCollectionFunction返回数据类型为CollectionDTOFunction参数名为userId。使用ODataConventionModelBuilder.Namespace界说定名空间,他是请求URI的一部分。

public class CollectionsV1Controller : ODataController { [EnableQuery] [HttpGet] public List<CollectionDTO> GetCollection(int userId) { return CollectionBLL.GetCollection(userId); } [HttpPost] public int AddCollection(CollectionBindingModel collectionBM) { return CollectionBLL.AddCollection(collectionBM); } } private static IEdmModel GetEdmModel() { ODataConventionModelBuilder builder = new ODataConventionModelBuilder();        var collectionSet = builder.EntitySet<Collection>("Collections").EntityType.Collection; var getCollectionFunction = collectionSet.Function("GetCollection").Returns<CollectionDTO>(); getCollectionFunction.Parameter<int>("userId"); collectionSet.Action("AddCollection").Returns<int>().Parameter<CollectionBindingModel>("collectionBM"); var deleteCollectionFunction = collectionSet.Function("DeleteCollection").Returns<int>();        deleteCollectionFunction.Parameter<int>("collectionUserId");        builder.Namespace = "Service"; return builder.GetEdmModel(); }

控制器与控制器要领

控制器担任自ODataController,ODataController上有[ApiExplorerSettings(IgnoreApi = true)]

[ODataFormatting][ODataRouting]这三个特性,,由于[ApiExplorerSettings(IgnoreApi = true)]

的影响,在System.Web.Http.Description.ApiDescription实例中不包罗担任自ODataController的控制器;控制器要领使用了[EnableQuery]修饰后才可撑持Odata操纵符。

自界说要领的方法有两种,使用EntityCollectionConfiguration<TEntityType>.ActionEntityCollectionConfiguration<TEntityType>.Function

使用EntityCollectionConfiguration<TEntityType>.Action界说的控制器要领可以通过body体传参;

使用EntityCollectionConfiguration<TEntityType>.Function界说的控制器要领可以通过url传参,但url写法值得注意,例如:(userId=3),注意这里使用了括号将参数括起来,而不是“?userId=3”这种格局

使用Action,不撑持HttpGet方法,仅撑持HttpPost方法。

Function仅撑持HttpGet方法,不撑持HttpPost方法。

asp.net web api 使用Odata