Tag: odata

在WCF数据服务中使用枚举

我正在尝试使用POCO数据模型手动构建WCF数据服务,我无法弄清楚如何正确公开enum值。 假设一个简单的模型,如: public class Order { public int ID {get; set;} public string Description {get; set;} public OrderStatus Status {get; set;} } public enum OrderStatus { New, InProcess, Complete } 如何通过OData WCF数据服务公开OrderStatus属性中的有价值信息? 如果不执行任何操作,则数据服务会生成运行时错误(枚举为无效属性)。 我见过的唯一解决错误的答案是将enum属性标记为已忽略,例如: [System.Data.Services.IgnoreProperties(“Status”)] public class Order … 这有效,但它会强制您从服务层“省略”有价值的信息。 是否有其他选项可以在WCF数据服务中使用枚举值? 编辑:请注意这是WCF数据服务 (aka Astoria)。 这不是原始WCF服务,在这种情况下答案更清楚。

添加新的OData控制器会使现有控制器失败

我正在从两个Web API OData示例构建一个示例,每个示例都可以作为一个单独的项目正常工作。 但是当我添加第二个ODataController类时,该站点不再适用于以前工作的OData路径模板。 这里有更多细节: 只要其控制器(ProductsController)是唯一的控制器,以下操作就可以正常工作: [HttpGet] [ODataRoute(“GetSalesTaxRate(state={state})”)] public IHttpActionResult GetSalesTaxRate([FromODataUri] string state) { return Ok(GetRate(state)); } 现在我添加了一个带有一些动作的新控制器(MoviesController)。 我扩展了Owin Startup类,所以它看起来像这样: public void Configuration(IAppBuilder builder) { var config = new HttpConfiguration(); config.MapODataServiceRoute(routeName: “functions route”, routePrefix: “functions”, model: FunctionStartup.GetEdmModel()); config.MapODataServiceRoute(routeName: “actions route”, routePrefix: “actions”, model: ActionStartup.GetEdmModel()); builder.UseWebApi(config); } 但是,当我尝试执行Web请求(URLBASE / functions / $ metadata)时,出现以下错误: System.InvalidOperationException控制器“Products”中的操作“GetSalesTaxRate”上的路径模板“GetSalesTaxRate(state = {state})”不是有效的OData路径模板。 […]

使用Odata服务并获得JSON结果

我正在使用DataServiceContext消费odata服务,并希望以json格式返回数据。 我看起来像这样: 使用DataServiceContext的Odata查询并获得结果为json 如果我尝试在发送请求事件中添加任何请求标头。 我无法在小提琴手中看到那个标题。 虽然事件是我已确认的射击。 我遇到了“context.Format.usejson”并尝试搜索它,但没有发现任何我能理解的东西。 有人可以帮帮我吗? 使用ODataLib调用WCF数据服务服务操作和JSON 我的目标是使用DataServiceContext消费到OData服务并获得JSON格式的结果。

如何反序列化oData JSON?

我正在尝试使用Northwind OData服务: http://services.odata.org/V3/OData/OData.svc/Products?$format=json 并将其反序列化为一组产品: using (var client = new HttpClient()) { HttpResponseMessage response = await client.GetAsync(new Uri(url)); ObservableCollection products = await response.Content.ReadAsAsync<ObservableCollection>(); } 但是序列化程序似乎不喜欢odata.metadata部分以及那里有2个odata.type记录的事实(不确定它们是什么)。 是否有捷径可寻?

将自定义查询支持的导航属性添加到ODataConventionModelBuilder

情况 我创建了以下Model类 public class Car { public int Id {get;set;} public string Name {get;set;} public virtual ICollection PartStates {get;set; } } public class PartState { public int Id {get;set;} public string State {get;set;} public int CarId {get;set;} public virtual Car Car {get;set;} public int PartId {get;set;} public virtual Part Part {get;set;} } public class Part […]

如何用C#中的正则表达式解析OData $ filter?

嗨,我想知道在C#中解析OData $filter字符串的最佳方法是什么 / API / organizations?$ filter =“name eq’Facebook’或name eq’Twitter’和subscriber gt’30” 应该返回所有名称为Facebook或Twitter且拥有超过30个订阅者的组织。 我已经研究了很多,但找不到任何不围绕WCF的解决方案。 我正在考虑使用Regex并对它们进行分组,因此我有一个Filter类列表,这样: Filter Resource: Name Operator: Eq Value: Facebook Filter Resource: Name Operator: Eq Value: Twitter Filter Resource: Subscribers Operator: gt Value: 30 但我很难过如何处理ANDs / ORs。

如何在ADO.Net实体数据模型中为密码连接提供密码

我一直在关注如何创建OData服务的本教程。 http://www.hanselman.com/blog/CreatingAnODataAPIForStackOverflowIncludingXMLAndJSONIn30Minutes.aspx 并且它完美无瑕地工作……但是,在实体数据模型向导中,当它要求您“选择您的数据连接”时,它会向您发出此警告。 “此连接字符串似乎包含连接到数据库所需的敏感数据(例如,密码)。在连接字符串中存储敏感数据可能存在安全风险。是否要将此敏感数据包含在连接字符串中?” 如果我选择:“不,从连接字符串中排除敏感数据。我将在我的应用程序代码中设置它。” 我没有看到我能在哪里,“在我的应用程序代码中”插入密码。 (我公司将它们加密到注册表中) 另外,我需要连接多个数据库,具体取决于环境(Dev,CA或Prod),我需要知道连接字符串中引用了什么数据库才能获得正确的密码。 谢谢。

Web API OData Inlinecount无法正常工作

我在ASP.NET Web API应用程序中使用开箱即用的ValuesController public class ValuesController : ApiController { // GET api/values [Queryable(PageSize = 1)] public IQueryable Get() { return new string[] { “value1”, “value2”, “value3”, “value4”, “value5” }.AsQueryable(); } } 当我get http://localhost/api/values?$inlinecount=allpages 这是回应 value1 我没有注释config.EnableQuerySupport(); 过滤,排序工作正常。 如果我尝试get http://localhost/api/values?$inlinecount=XXXXX我得到一个exception,所以似乎Web API应用程序知道inlinecount The query specified in the URI is not valid. ‘xxx’ is not a valid value […]

Web API和OData-传递多个参数

是否有可能让OData执行以下操作? 我希望能够通过传递参数来查询REST调用,而不是主键。 我可以调用REST方法,如:> GetReports(22, 2014)或Reports(22, 2014) GetReports(22, 2014) Reports(22, 2014) ? [HttpGet] [ODataRoute(“Reports(Id={Id}, Year={Year})”)] public IHttpActionResult GetReports([FromODataUri]int Id, [FromODataUri]int Year) { return Ok(_reportsRepository.GetReports(Id, Year)); } 这是我最新的变化。 //Unbound Action OData v3 var action = builder.Action(“ListReports”); action.Parameter(“key”); action.Parameter(“year”); action.ReturnsCollectionFromEntitySet(“Reports”); 我的控制器ReportsController的方法 [HttpPost] [EnableQuery] public IHttpActionResult ListReports([FromODataUri] int key, ODataActionParameters parameters) { if (!ModelState.IsValid) { throw new HttpResponseException(HttpStatusCode.BadRequest); } […]

WebAPI和ODataController返回406 Not Acceptable

在将OData添加到我的项目之前,我的路由设置如下: config.Routes.MapHttpRoute( name: “ApiById”, routeTemplate: “api/{controller}/{id}”, defaults: new { id = RouteParameter.Optional }, constraints: new { id = @”^[0-9]+$” }, handler: sessionHandler ); config.Routes.MapHttpRoute( name: “ApiByAction”, routeTemplate: “api/{controller}/{action}”, defaults: new { action = “Get” }, constraints: null, handler: sessionHandler ); config.Routes.MapHttpRoute( name: “ApiByIdAction”, routeTemplate: “api/{controller}/{id}/{action}”, defaults: new { id = RouteParameter.Optional }, constraints: new { […]