Tag: odata

重用WEB API OData控制器的现有ASP.NET-MVC 5 Identity 2授权,以便轻松登录其他应用程序?

我有完整的ASP.NET-MVC5应用程序,我通过WEB API 2 OData控制器进行了扩展。 比如我有: public class PersonController : ODataController 和需要授权的MVC控制器 [Authorize] public class PersonController : Controller 两个控制器都在我的DbSets中使用ApplicationDbContext 我不想通过WEB API控制器向世界上的每个人提供有关人员的数据。 我已经在我的MVC应用程序中拥有User , Moderator和Admin角色。 我可以以某种方式使用已经存在的授权模块(Identity 2.x),当有人试图从Person WEB API Controller获取数据时要求登录。 例如: http://localhost:17697/odata/Person?$expand=ReceivedCalls 直接问题 : 如果我做: [Authorize] public class PersonController : ODataController { 然后当我去链接时: http://localhost:17697/odata/Person 我被重定向到登录页面。 但是这个登录页面适用于人类。 如何使客户端应用程序轻松登录。

不支持输入类型为“Domain.Entities.Request”的“TypeIs”表达式和“Domain.Entities.Base”类型的检查

我收到这个错误: 不支持带有“Domain.Flood.Entities.Things.SomeObject”类型输入的“TypeIs”表达式和“Domain.Entities.Base”类型的检查。 LINQ to Entities查询仅支持实体类型和复杂类型。 我正在尝试调用我的OData API并在我的对象上展开CreatedBy属性。 CreatedBy属性位于基类中,是一种User。 所以我的基类看起来像这样: [DataContract(Namespace = “http://schemas.microsoft.com/ado/2007/08/dataservices”)] public abstract class Base { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] [DataMember] public int Id { get; set; } [DataMember] public string Name { get; set; } [DataMember] public string Description { get; set; } private User createdBy; [DataMember] public virtual User CreatedBy { get { return […]

如何创建一个动态的“包含或LIKE”表达式,以便与Linq一起使用OData服务

我尝试使用System.Linq.Expressions.Expression(WPF / c#4.0)创建动态查询工具。它针对OData服务运行。 到目前为止,只要我限制条件构建在Equal(..),GreaterThan(..)等选项中,所有这些都是有效的。似乎没有构建contains / Like条件,所以我尝试构建自己的。 那里已经有一些文章了。 我试过的一个是如何为Like创建一个System.Linq.Expressions.Expression? 。 现在,如果我使用上面的解决方案,结果where表达式 whereCallExpression = {Convert([10000]).Expand(“A,B”).Where(clt => MyLike(clt.LastName, “te”))}’ 这很好,但错了,因为它没有转化为有效的Odata查询。 如果我使用条件’Equal’,结果是 whereCallExpression = {Convert([10000]).Expand(“A,B”).Where(clt => (clt.LastName == “te”))} 这导致OData查询 results = {http://…/Clients()?$filter=LastName eq ‘te’&$expand=A,B} 并按预期工作。 我是否在解决方案的实施方面出了问题,或者它不能与OData一起使用? 它应该转移到类似…?$filter=substringof(‘te’, LastName ) eq true 有关如何解决此问题的任何解决方案 问候 安德烈亚斯 PS,我在静态类中实现了解决方案扩展,我改变的是从’Like’到’MyLike’的被调用方法的名称。此外,因为用于构建表达式的代码适用于任何内置条件,我想,现在这部分还可以。 如果需要,我可以发布部分内容

WebAPI OData $跳过自定义IQueryable double应用

我已经实现了一个通过WebAPI OData端点公开的自定义IQueryable。 控制器的Get()结构相当标准: [EnableQuery( AllowedQueryOptions = AllowedQueryOptions.Count | AllowedQueryOptions.Filter | AllowedQueryOptions.OrderBy | AllowedQueryOptions.Skip | AllowedQueryOptions.Top)] [ODataRoute] public PageResult Get(ODataQueryOptions queryOptions) { var bars = new QueryableData(_provider); var result = ((IQueryable)queryOptions .ApplyTo(bars, new ODataQuerySettings(new ODataQuerySettings { EnableConstantParameterization = false, EnsureStableOrdering = false }))).ToList(); var count = _provider.Count; return new PageResult(result, null, count); } 我看到的奇怪的行为是,在返回PageResult后应用查询字符串中的OData $ Skip。 […]

从WebAPI返回PageResult而不是格式化为OData

我正在尝试将基于WebAPI的应用程序从WebAPI RC迁移到发布版本。 它接受一些查询参数,并返回ATOM格式的OData。 由于它是一个正在运行的服务,我需要保持当前的行为。 我已经更改了API方法以返回包含我的数据的PageResult 。 根据MSDN上的支持OData查询选项文章应该是我需要做的全部,但它不起作用。 我得到了结果,但它总是格式化为JSON。 我已经尝试将Accept请求标题更改为application/atom+xml ,但它似乎没有任何区别。 我也试过在我的WebApiConfig添加以下行没有明显的效果: configuration.EnableQuerySupport(); configuration.Formatters.InsertRange(0, ODataMediaTypeFormatters.Create()); 我尝试清除现有的格式化程序,只是为了看看会发生什么。 我刚刚收到406 Not Acceptable错误。 所以似乎OData格式化程序可能没有报告他们可以处理请求/响应?

如何将OData键值添加到Entity Framework类?

我正在使用MVC 5,Microsoft OData 2.1和Entity Framework 6.我正在尝试使用我使用EntitySetController类编写的OData源。 当我添加服务引用并消耗OData元数据时,它可以看到我的资源,但是当我尝试保存它时,我收到一个错误: 自定义工具“DataServicesCoreClientGenerator”失败。 数据服务客户端代码生成失败:指定的架构无效。 错误:(0,0):错误0159:实体’…’没有定义键。 定义此EntityType的键..# 我的OData元数据如下所示: 我尝试使用以下代码将[Key]属性添加到vApplication类: [MetadataType(typeof(vApplicationKey))] public partial class vApplication { } public class vApplicationKey { [Key] public System.Guid ApplicationId { get; set; } } 但这不会改变我的元数据,错误仍然存​​在。 EDMX模型中的实体键设置为ApplicationId。 这似乎也不会影响元数据。 如何获取元数据以生成具有实体键的模式,以便我可以使用服务引用在C#中使用它? PS我正在消费观点。 当我直接使用表时,它似乎有效。 那么如何让它与Views一起使用呢?

是否可以通过odata查询soap端点?

我有一个SOAP端点: /XRMServices/2011/Organization.svc 我想围绕这个服务创建一个odata包装器,这样当导航到http://myodataservice/api/Entities$?filter=AccountNumber eq ‘123123’ 它将从SOAP(wsdl)服务中检索数据,但它允许客户端发出odata查询。 是否可以使用ODATA查询SOAP服务?

冻结linq IQueryable(作为ToList()。AsQueryable()会这样做)

有没有办法冻结IQueryable以便在命中数据库时不会向查询添加其他连接? 例如,我可以使用.ToList()来冻结查询,但这会产生性能影响,因为我所做的任何过滤都在中间层上,而且我在数据库服务器上预过滤没有任何性能提升? 为清晰起见编辑: 我有一个OData服务,它返回一个IQueryable ,客户端可以根据需要过滤/排序/项目。 我只想阻止他们提取更多数据。 我可以通过执行ToList().AsQueryable()来做到这一点,但是它失去了lazyLoading的优势,并且随之而来的是允许客户端过滤请求的全部目的。 我看到的一个选项是设置: EnableQueryAttribute.AllowedQueryOptions以排除Expand ,但是即使我的初始Query已经扩展,客户端仍然无法选择这些部分。

启动时出现OData v4错误:找不到该段’Whatever’的资源

我正在构建我的新v4服务,一切顺利,直到我为新模型/实体添加了一个新控制器,并在启动网站进行测试运行时出现此错误。 控制器似乎正确编码,就像其他控制器一样。 控制器“CustomersOData”中操作“GetFeed”上的路径模板“Customers”不是有效的OData路径模板。 未找到“客户”细分的资源。 这对地球意味着什么?

WebAPI 2.2 OData v4 适用于哪里?

从2015年1月起应用EnableQueryAttribute在哪里正确/不正确? 该文件链接如下: http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/create-an-odata-v4-endpoint 说: [EnableQuery]属性允许客户端使用$ filter,$ sort和$ page等查询选项修改查询。 有关更多信息,请参阅支持OData查询选项。 以下链接文件: http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options 说: EnableQuerySupport方法为任何返回IQueryable类型的控制器操作全局启用查询选项。 但是这篇关于WebApi 2.2上OData 4的文档已经将它放在了返回IHttpActionResult的行为上: http://blogs.msdn.com/b/webdev/archive/2014/03/13/getting-started-with-asp-net-web-api-2-2-for-odata-v4-0.aspx [ODataRoutePrefix(“Teams”)] public class TeamsEntitySetController : ODataController { private readonly LeageContext _leage = new LeageContext(); [EnableQuery] [ODataRoute] public IHttpActionResult GetFeed() { return Ok(_leage.Teams); } [ODataRoute(“({id})”)] [EnableQuery] public IHttpActionResult GetEntity(int id) { return Ok(SingleResult.Create(_leage.Teams.Where(t => t.Id == id))); } } […]