Tag: odata

元数据与WebAPi OData属性路由不起作用

我正在为OData端点使用OData属性路由。 这是我的一个例子: [ODataRoutePrefix(“Profile”)] public class ProfileODataController : ODataController { [ODataRoute] [EnableQuery] public IHttpActionResult Get() { var repo = new Repositories.ProfileRepository(); return Ok(repo.GetProfiles()); } [ODataRoute(“({key})”)] [EnableQuery] public IHttpActionResult Get([FromODataUri] string key) { var repo = new Repositories.ProfileRepository(); var result = repo.GetProfiles().SingleOrDefault(x => x.Id== key); if (result == null) return NotFound(); return Ok(result); } } 这是我的设置: config.MapODataServiceRoute(“odata”, […]

.Net WebApi OData返回Queryable的操作

我希望实现接近RateProduct操作的内容: http : //www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-actions 在该教程中,它被定义为: [HttpPost] public int RateProduct([FromODataUri] int key, ODataActionParameters parameters) { // … } ODataModelBuilder modelBuilder = new ODataConventionModelBuilder(); modelBuilder.EntitySet(“Products”); // New Code ActionConfiguration rateProduct = modelBuilder.Entity().Action(“RateProduct”); rateProduct.Parameter(“Rating”); rateProduct.Returns(); 但是,我有一个Location实体的用例,它足够聪明,可以返回其周围某个半径范围内的其他位置。 它大致应该是这样的: [HttpPost] public IQueryable GetLocationsWithinRadius([FromODataUri] int key, ODataActionParameters parameters) { // Get the Location instance intended to be the center of the […]

Odata没有找到NavigationLink工厂

我目前正在开发mvc4 web api odata服务,我希望返回用户列表中的用户列表。 当我想获得用户时,我收到以下错误: 错误: The ‘ObjectContent`1’ type failed to serialize the response body for content type ‘application/json; charset=utf-8’. System.InvalidOperationException No NavigationLink factory was found for the navigation property ‘Languages’ from entity type ‘MvcWebRole1.Models.User’ on entity set ‘Users’. Try calling HasNavigationPropertyLink on the EntitySetConfiguration. Parameter name: navigationProperty System.ArgumentException at System.Web.Http.OData.Builder.EntitySetLinkBuilderAnnotation.BuildNavigationLink(EntityInstanceContext instanceContext, IEdmNavigationProperty navigationProperty, ODataMetadataLevel […]

在尝试标记odata时,可查询属性未在mvc 4 web api中进行编译

我正在使用visual studio 2012附带的MVC 4 web api。 据我所知,odata不会自动解析,但我们需要在行动中添加[Queryable]属性。 所以我添加了它: public class TestController : ApiController { [Queryable] public IQueryable GetMyClasses() { return …; } } 但我得到一个编译错误: The type or namespace name ‘Queryable’ could not be found (are you missing a using directive or an assembly reference?) odata仍然受支持吗? 以及为什么Queryable不被识别为此处列出的属性。 谢谢

如何正确地将OData与ASP.net Core集成

我正在尝试使用OData和EntityFramework创建一个带有“简单”web api的新ASP.NET Core项目。 我之前使用OData与旧版本的ASP.NET。 我已经设置了一个只有一个简单的get函数的控制器。 我已经设法使用基本的OData命令作为filter和顶部,但我无法使扩展命令工作。 我想这是因为我无法弄清楚如何在Startup.cs中设置它。 我尝试了很多东西,包括跟随Github的一些odata样本: https://github.com/OData/WebApi/tree/vNext/vNext/samples/ODataSample.Web https://github.com/bigfont/WebApi/tree/master/vNext/samples/ODataSample.Web 在我的启动文件中,我尝试从Service类中排除一些根本没有效果的属性。 所以问题可能在于我使用IDataService接口的方式。 (ApplicationContext像样本一样实现它) 要清楚我正在使用完整的.NET Framework创建一个ASP.NET Core web api,而不仅仅是.Core框架。 我当前的代码是两个样本中最好/最差的混合,并且我可以过滤WebAPI,但不能让它扩展或隐藏属性。 任何人都可以看到我缺少的东西og有一个工作的ASP.NET Odata样本。 我是startup.cs中整个设置的新手? 猜猜我正在找一个做过这项工作的人。 调节器 [EnableQuery] [Route(“odata/Services”)] public class ServicesController : Controller { private IGenericRepository _serviceRepo; private IUnitOfWork _unitOfWork; public ServicesController(IGenericRepository serviceRepo, IUnitOfWork unitOfWork) { _serviceRepo = serviceRepo; _unitOfWork = unitOfWork; } [HttpGet] public IQueryable Get() […]

asp.net mvc web api使用OData Patch进行部分更新

我正在使用HttpPatch来部分更新对象。 为了实现这一点,我使用OData的Delta和Patch方法(这里提到: 目前推荐的使用Web API执行部分更新的方法是什么? )。 一切似乎工作正常,但注意到映射器区分大小写; 当传递以下对象时,属性将获得更新的值: { “Title” : “New title goes here”, “ShortDescription” : “New text goes here” } 但是当我传递具有较低或驼峰式属性的相同对象时,Patch不起作用 – 新值不会通过,因此看起来反序列化和属性映射存在问题,即:“shortDescription”到“ShortDescription” ”。 是否有使用Patch忽略区分大小写的配置部分? 供参考: 在输出中,我使用以下格式化程序的camel-case属性(遵循REST最佳实践): //formatting JsonSerializerSettings jss = new JsonSerializerSettings(); jss.ContractResolver = new CamelCasePropertyNamesContractResolver(); config.Formatters.JsonFormatter.SerializerSettings = jss; //sample output { “title” : “First”, “shortDescription” : “First post!” } 然而,我的模型类遵循C#/ .NET格式约定: public […]

OData只读属性

我有一个带OData V4的WebAPI 2.2应用程序。 我也在使用EF 6.1。 在我的一个实体中,我有一个计算属性: public class Person { public string FirstName { get; set; } public string LastName { get; set; } // Calculated Property – No setter public string FullName { get { return FirstName + ” ” + LastName; } } 为了向我的客户提供计算属性,我需要在OData模型中注册 public static IEdmModel GetModel() { ODataModelBuilder builder = new […]

Odata默认扩展查询结果

有没有办法在odata 5.7的响应中自动扩展嵌套实体? 因为默认情况下我们必须添加?$ expand = myNestedEntity

WCF数据服务 – 代理中间层服务

我们正在开发的项目是一个经典的3层架构。 第1层是数据库服务器,第2层是应用程序服务,第3层是表示层(网站)。 在应用程序服务层中,我有一个项目,其中包括entity framework模型和基于WCF数据服务的服务,该服务公开模型中的实体,例如: public class DataService : DataService 这是一个完全成熟的OData服务,可以通过URI查询,例如: /dataservice.svc/mytable?$filter=contains(fieldname,’string’) 。 这对于使用jQuery开发任何东西的人来说非常棒,因为他们所要做的就是定义查询。 问题是这项服务是中等级的,因此外界无法看到它。 我正在尝试的解决方案是在网站上公开另一个WCF数据服务,该服务公开由服务引用创建的实体。 如果我向中间层服务添加服务引用,它会为我提供一个数据上下文,在新的WCF数据服务中使用数据上下文: public class DataService : DataService 我必须覆盖CreateDataSource: protected override PortalEntities CreateDataSource() { return new PortalEntities(GetMianModelServiceUri()); } 新服务确实像代理一样运行并返回暴露的实体(查询…/Services/OData/DataService.svc/tbl_Country正常工作)。 但是当一个查询被传递给服务时,例如: …/OData/DataService.svc/tbl_Country?$select=Name它会抛出一个未实现的exception。 有关如何扩展网站服务以使其支持与中间层服务相同的查询的任何想法?

GROUP BY / Case Asp.Net Web API ODATA的不敏感扩展?

无法通过ODATA V4文档中的引用找到组。 当我们在URL中通过查询传递组时,它只返回键,而不是实际的分组结果。 在ODATA Web API的可扩展性点上,在Asp.Net ODATA中使用Group by的任何参考。 我们需要完全掌握如何解析ODATA查询并将其转换为LILNQ到实体查询。 我正在谈论拦截ODATA查询和执行手动定制的行,例如LINQ to Entities 我正在努力实现Case Sensitivity的类似扩展。 OData Case Web API中的In-Sensitive过滤?