Tag: odata

使用asp.net webapi实现oData inlinecount

可能重复: 使用WebApi进行OData分页($ inlinecount) 由于Asp.net WebAPi几乎支持odata,因此我非常喜欢让$ inlinecount工作,以便它与kendo ui(或任何其他)很好地协作。 因此它以jsonp格式返回值,我实现了一个新的MediaFormatter(来自Stackoverflow)。 麻烦的是它需要结果才能在其中包含count元素以使服务器端分页工作,所以现在我攻击了格式化程序以获得虚假计数。 这一切都很好,并且网格都很开心,但是真正的计数是一个挑战,因为返回的IQueryable表达式已经应用了filter/ Take等。 public override Task WriteToStreamAsync(Type type, object value, Stream stream, HttpContentHeaders contentHeaders, TransportContext transportContext) { string callback; if (IsJsonpCountableRequest(out callback)) { return Task.Factory.StartNew(() => { var q = value as IQueryable; var count = q.Count(); // this count doesnt return the actual count var writer […]

如何通过Id为Odata创建查询表达式

我已经创建了一个OData服务,现在我正在尝试在客户端使用此服务。 我想创建一个表达式,例如c#查询表达式中的下面的url- http://odata.org/Product-Service/Product(150) 上面的url在浏览器中工作正常,但我想在C#中为上面的url创建查询表达式。 任何帮助都会非常明显。

ODataController返回HTTP 406不可接受

我正在Web API 2.2上构建OData 3服务。 该服务正确返回我的实体的元数据,但在查询其中一个实际实体时返回406 Not Available 。 我做了很多研究(我目前正在学习几个教程),但我还没有找到任何实际工作的东西。 这是我的WebApiConfig: using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; using System.Web.OData.Builder; using System.Web.OData.Extensions; namespace MyProject { public static class WebApiConfig { public static void Register(HttpConfiguration config) { ODataModelBuilder builder = new ODataConventionModelBuilder(); builder.EntitySet(“MarvelCharacters”); config.MapODataServiceRoute( routeName: “Marvel”, routePrefix: “dude”, model: builder.GetEdmModel()); } } } 和我的控制器(不完整,但你明白了): using System; […]

ASP.NET Odata Web API的error handling

我很想知道在ODataController中引发exception的最佳实践是什么。 如果在方法中引发exception,则默认情况下将其转换为响应代码500,并且内容包含有关错误的详细信息。 我希望明确响应代码,并在无效密钥的情况下发送400。 例如:如果输入请求具有无效密钥,则希望返回400的HttpResponseCode,并且内容应该具有类似于引发exception的错误详细信息。 非常感谢您的投入

如何正确unit testingOData v6.0控制器?

我正在尝试对OData控制器进行unit testing,但API已更改,之前推荐的方法我尝试不起作用 – 目前我正在使用 没有注册非OData HTTP路由。 当试图将ODataQueryOptions实例化为传递给控制器​​的Get方法时 我目前的代码(基于这样的答案): [TestMethod()] public void RankingTest() { var serviceMock = new Mock(); serviceMock.SetReturnsDefault<IEnumerable>(new List() { new Vendor() { id = “1” } }); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, “http://localhost/odata/Vendor”); ODataModelBuilder builder = new ODataConventionModelBuilder(); builder.EntitySet(“Vendor”); var model = builder.GetEdmModel(); HttpRouteCollection routes = new HttpRouteCollection(); HttpConfiguration config = new HttpConfiguration(routes) […]

仅为路由公开.NET OData API的子集(对于排除的API,返回404)

背景/环境: 我们有两条路线,路线前缀不同: 路由1前缀: /api 路由2前缀: /api/partial 目前,我们对两个路由前缀使用相同的EdmModel。 (参见第一个代码snippit,名为“我们目前正在做什么”)。 我们想要什么: 我们只需要为Route 2允许APIfunction的子集: /api/partial 。 当有人试图访问“部分”EdmModel不可用的API时,我们希望返回404 例: 我们想为/api/parial/products返回404 ,其中products未在此“部分”API路径中定义。 我们仍希望将/api/products路由到控制器方法 我们尝试过的: 使用第二个EdmModel,它只包含完整EdmModel中可用实体的子集。 (参见第二个代码snippit,名为“我们想做什么:”。) 问题: 我们在服务启动时收到错误: The path template ‘products’ on the action ‘Export’ in controller ‘Products’ is not a valid OData path template. Resource not found for the segment ‘products’.) The path template ‘products’ on the action […]

为什么我的WCF数据服务无法提供自动生成的ADO.Net EDM?

我正在尝试按照本教程: http : //msdn.microsoft.com/en-us/data/gg601462.aspx来设置ODATA服务。 我使用向导从我的SQL Server数据源创建(使用向导)和ADO.NET实体数据模型。 然后我建立了一个WCF数据服务,并告诉它使用这些实体。 它没有提供数据,而是产生了一个不透明的服务器错误,通过在服务器类def上面添加它,我可以减少不透明度: [System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults = true)] 因此,我实际上可以看到错误。 从“通常是java”程序员的角度来看,这看起来像是一个类转换错误。 这似乎很奇怪,因为我在新安装的VS Pro 2013试用版中遵循了教程 有人能理解错误并告诉我如何通过这个吗? The server encountered an error processing the request. The exception message is ‘Expression of type ‘System.Data.Entity.Core.Objects.ObjectContext’ cannot be used for return type ‘System.Data.Objects.ObjectContext”. See server logs for more details. The exception stack trace is: at System.Linq.Expressions.Expression.ValidateLambdaArgs(Type delegateType, Expression& […]

如何将OAuth2.0与OData客户端代码生成器集成?

我开发了一个实现OAuth2.0和OData的WebApi。 现在我正在建立一个客户端来测试我到目前为止所实现的内容。 我使用OData客户端代码生成器为OData生成了模板,但是如何在OData请求中引入de访问令牌? 知道如何扩展OData模板以引入OAuth2.0方案吗? 或者更简单的方法,如何在每个OData请求中引入OAuth访问令牌? UPDATE static void Main(string[] args) { var container = new Default.Container(new Uri(baseurl)); TokenResponse accessToken = null; try { accessToken = GetToken(); } catch (Exception ex) { Console.WriteLine(“Can’t do nothing without an access token…”); return; } //I want to introduce in every request the following information: //Basic autentication header with cliendId […]

将OData Queryable与存储库一起使用?

我有这个存储库方法: public IQueryable GetAll() { using (var context = new DatabaseContext()) { return context.Set().AsQueryable(); } } 无论如何, TModel是一个艺术家模型 然后我在我的控制器中执行此操作: // GET api/artist [Queryable] public IQueryable Get() { return _repo.GetAll().AsQueryable(); } 现在..如果我要更改存储库方法以返回List并为我的结果添加.ToList ..那么这将很有效。 但是无论OData查询是什么,我都会首先执行“获取所有查询”…将它们转换为列表,然后我将针对该列表执行我的OData查询。 这似乎是完全错误的..我想要做的是确保OData查询在我尝试从数据库中获取数据的同时执行..所以我只得到与查询匹配的非常具体的结果..而不是后来被查询的大量数据.. 现在我有问题, DbContext在使用之外被处理掉了..但是我仍然需要关闭DbContext以及一些地方,一些如何… 有任何想法吗?

如何使用Microsoft ASP.NET Web API OData中的Delta 和Code First \ JsonMediaTypeFormatter

有什么问题? 我正在尝试在我的ASP.net web api应用程序中启用修补程序。 我正在使用代码第一entity framework。 我有以下方法标题,我可以设置一个断点,它将命中: [AcceptVerbs(“PATCH”)] public async Task Patch(long appId, long id, Delta formGroup) 但是,当我调用formGroup.Patch(实体)时,不会对我的实体进行任何更改。 如果我将以下内容放入即时窗口: formGroup.GetChangedPropertyNames() 然后这个集合是空的,这似乎是错误的。 我试过了什么? 我一直在提到以下例子 http://techbrij.com/http-patch-request-asp-net-webapi http://www.strathweb.com/2013/01/easy-asp-net-web-api-resource-updates-with-delta / Json MediaType Formatter似乎不知道如何正确构建Delta对象,但是在第二个链接中,filip似乎表明它应该在没有oDataMediaTypeFormatter的情况下工作。 我已经开始试图将我的模型序列化为EDMX表示,然后从那里提取CSDL以便我可以创建一个oDataMediaTypeFormatter,但我也遇到了障碍,加上它似乎有点矫枉过正。 如果有人能够对此有所了解,那将非常感激。 如果需要更多信息,请与我们联系。 编辑: 这是SimpleFormGroup的类定义: public class SimpleFormGroup { public int LastUpdate; public string Identifier; public string Title; public int DisplayOrder; } 这是我发送的数据: Content-Type: ‘application/json’ { […]