c# – .Net WebApi OData返回Queryable的操作
发布时间:2020-12-15 06:50:15 所属栏目:百科 来源:网络整理
导读:我想要实现一些接近RateProduct的动作,描述如下: http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-actions 在该教程中,它被定义为: [HttpPost]public int RateProduct([FromODataUri] int key,ODataActionParameters paramete
我想要实现一些接近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<Product>("Products"); // New Code ActionConfiguration rateProduct = modelBuilder.Entity<Product>().Action("RateProduct"); rateProduct.Parameter<int>("Rating"); rateProduct.Returns<int>(); 但是,我有一个位置实体的用例,足够聪明地返回其周围的某个半径的其他位置.大概应该是这样的: [HttpPost] public IQueryable<Location> GetLocationsWithinRadius([FromODataUri] int key,ODataActionParameters parameters) { // Get the Location instance intended to be the center of the radius by using the key // Do a radius search around it using (int)parameters["radius"] as the radius // return the IQueryable<Location> of all location found within that radius } ODataModelBuilder modelBuilder = new ODataConventionModelBuilder(); modelBuilder.EntitySet<Location>("Locations"); // New Code ActionConfiguration getLocations = modelBuilder.Entity<Location>().Action("GetLocationsWithinRadius"); getLocations.Parameter<int>("radius"); getLocations.Returns<IQueryable<Location>>(); 我希望让这个工作,当前的返回类型是IQueryable< Location>当前它不起作用.如果返回类型是一个像int的原始类型,那么它可以工作,否则当我在fiddler中创建一个帖子时,它会给出以下错误(该帖子类似于http:// localhost:2663 / odata / Locations(2112)/ GetLocationsWithinRadius请求正文为{radius:50}): { "odata.error":{ "code":"","message":{ "lang":"en-US","value":"An error has occurred." },"innererror":{ "message":"The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; odata=minimalmetadata; streaming=true; charset=utf-8'.","type":"System.InvalidOperationException","stacktrace":"","internalexception":{ "message":"The related entity set could not be found from the OData path. The related entity set is required to serialize the payload.","type":"System.Runtime.Serialization.SerializationException","stacktrace":" at System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteObject(Object graph,ODataMessageWriter messageWriter,ODataSerializerContext writeContext)rn at System.Web.Http.OData.Formatter.ODataMediaTypeFormatter.<>c__DisplayClassa.<WriteToStreamAsync>b__9()rn at System.Threading.Tasks.TaskHelpers.RunSynchronously(Action action,CancellationToken token)" } } } } 可以做我想要完成的工作吗?如果是,请问是否返回的IQueryable< Location>变得与odata paramaters …(那将是很好) 谢谢 解决方法
看起来你的动作配置不正确.尝试以下内容,看看它是否有效:
//getLocations.Returns<IQueryable<Location>>(); getLocations.ReturnsCollectionFromEntitySet<Location>("Locations"); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- PostgreSQL/Materialized Views
- oracle – 随机获取ORA-08177只有一个活动会话
- STM32 内部flash的读写程序
- objective-c – 不鼓励使用beginAnimment
- React-Native工程项目打包编译发布过程详解
- ruby-on-rails – 为什么rails预编译任务执行非摘要资产
- ruby-on-rails-3 – 使用SendGrid时使用默认发件人名称?
- 关于flex 和java上传是用FileReference 时候遇到的问题
- iphone – Xcode的Build和Archive无法正常工作
- 正则表达式 – Visual Basic正则表达式问题