Asp.Net WebAPI添加OData功能后,支持查询,排序,过滤。

给Asp.Net WebAPI添加OData功能后,就能支持在url中直接输入排序,过滤条件了。

一.修改WebAPIConfig.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using System.Net.Http.Formatting;
using System.Net.Configuration;

namespace ProjectManagementWebAppV3
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            config.Formatters.JsonFormatter.AddQueryStringMapping("$format", "json", "application/json");
            config.Formatters.XmlFormatter.AddQueryStringMapping("$format", "xml", "application/xml");

            config.EnableQuerySupport();

        }
    }
}

主要添加红色粗体字:config.EnableQuerySupport();
这是存在于System.Web.Http.OData.dll里的一个静态扩展方法,表示在项目中启用OData查询。

二.修改ProjectManagementControler.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using ProjectManagementWebAppV3.Models;
using System.Web.Http.OData.Query;
using ProjectManagementWebAppV3.Utility;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace ProjectManagementWebAppV3.Controllers
{
    public class ProjectManagentController : ApiController
    {
        private static List<ProjectModel> projectList = null;

        static ProjectManagentController()
        {
            projectList = new List<ProjectModel>
            {
               new ProjectModel { id=1, ProjectName = "项目1", MileStones = "2013年1月开始,3月组装测试,6月功能测试,10月上线;" },
               new ProjectModel { id=2, ProjectName = "项目2", MileStones = "2013年3月开始,6月组装测试,9月功能测试,12月上线;" },
               new ProjectModel { id=3, ProjectName = "项目3", MileStones = "2013年7月开始,9月组装测试,11月功能测试,12月上线;" }
            };
        }
        /// <summary>
        /// 获取全部数据
        /// </summary>
        /// <returns></returns>
        [Queryable(AllowedQueryOptions = AllowedQueryOptions.All)]
        public List<ProjectModel> Get()
        {
            return projectList;
        }
    }
}

主要在Get方法上增加红色粗体字的属性:[Queryable(AllowedQueryOptions = AllowedQueryOptions.All)]

三.运行示例:

http://localhost:port/api/ProjectManagent?$top=2&$filter=id lt 10&$orderby=id desc

四.代码下载:

packages和bin目录太大无法上传,只把项目代码打了个包。

代码下载

时间: 2024-11-09 15:47:04

Asp.Net WebAPI添加OData功能后,支持查询,排序,过滤。的相关文章

MVC.Net:WebAPI添加对jsonP的支持

在某些情况下,我们需要在WebAPI项目中添加对jsonP的支持.比如我们同时创建了MVC.Net和WebAPI两个项目,这两个项目使用不同的端口,这时如果MVC.Net项目的前端想要直接访问WebAPI项目,就会出现"cross-origin"的错误.要解决这个问题,我们通常会使用jsonP的方法. 要让WebAPI支持返回jsonP格式,需要的步骤如下: 1. 通过NuGet安装WebApiContrib.Formatting.Jsonp.项目地址:https://github.c

Asp.Net WebApi 集成OWIN架构后,出现 “没有 OWIN 身份验证管理器与此请求相关联” 的解决办法

在Asp.Net WebApi 项目中开启OWIN模块之后,如果没有在OWIN的Startup类中配置认证方式,调用WebApi的相关Controller和Action就会出现如下异常: 出现错误. 没有 OWIN 身份验证管理器与此请求相关联. ExceptionType:System.InvalidOperationException StackTrace: 在 System.Web.Http.Owin.PassiveAuthenticationMessageHandler.Suppress

asp.net WebAPI 问题 iisnode默认不支持PUT和DELETE的解决

因为iisnode的自动重启服务器方便,一直用的它来作为开发中的node服务器,今天一个delete命令过去,得到一个405(?好像是)错误,让我很郁闷. 用原生的node试一下,是完美支持的,本来打算用Node算了的,还是舍不得iisnode的方便性,于是一翻搜索,找到了解决方案,主要是WebDavModule模块阻止了PUT和DELETE请求,把它删除即可: 方法1: 从IIS管理器/你的站点/Modules路径找到WebDavModule,然后右键删除之, 方法2: 或者在你的应用程序的w

如何在asp网站中添加下载功能

%E6%88%91%E7%9A%84%E7%A8%8B%E5%BA%8F%E5%86%99%E5%88%B0%E4%BA%86%E5%85%B3%E9%94%AE%E6%AD%A5%E9%AA%A4%E4%BA%86%E5%A4%A7%E7%A5%9E%E8%AF%B7%E8%BF%9B http://f.703804.com/item-554539.html http://f.703804.com/item-554540.html http://f.703804.com/item-554542

让Asp.net mvc WebAPI 支持OData协议进行分页查询操作

这是我在用Asp.net mvc WebAPI 支持 OData协议 做分页查询服务时的 个人拙笔. 代码已经开发到oschina上.有兴趣的朋友可以看看,欢迎大家指出不足之处. 看过了园子里的几篇关于ASP.NET MVC WebAPI 支持OData协议的文章,很受启发. 但是对于OData协议下对数据的分页查询,确实没有找到让我满意的东西,可能是个人就这脾气.不喜欢复杂. 对于在 WebAPI 支持OData协议,好处不多讲了,反正,我个人是非常乐意用它来做服务接口之类的. 这篇笔记的主题

ASP.NET MVC + 百度富文本编辑器 + EasyUi + EntityFrameWork 制作一个添加新闻功能

本文将交大伙怎么集成ASP.NET MVC + 百度富文本编辑器 + EasyUi + EntityFrameWork来制作一个新闻系统 先上截图: 添加页面如下: 下面来看代码部分 列表页如下: 1 @{ 2 Layout = null; 3 } 4 5 <!DOCTYPE html> 6 7 <html> 8 <head> 9 <meta name="viewport" content="width=device-width&qu

JavaScript在表单页面添加打印功能,打印表单中的值并打印完成后不刷新页面

在一个项目中,有一个功能需求 在一个页面上,有一个表单,表单包括textbox, radiobutton, checkbox, textarea等控件 用户填写表单后,按下submit按钮提交表单 现在用户有个需求,他们希望在这个页面上增加一个print按钮或者链接 点击print时,可以打印 最简单的想法就是,加上一个print的链接,然后调用javascript中的window.print()能打印 我最初是这样写代码的 在网页上增加一个print的链接 <a href="javasc

重温ASP.NET WebAPI(二)进阶

介绍 本文为个人对WebApi的回顾无参考价值. 本文内容: Rest和UnitOfWork 创建WebAPi的流程 IOC-Unity的使用 MEF 自定义URL Base认证和Token自定义权限 日志NLog OData的使用 Owin自宿主的使用 代码地址:https://github.com/OtherRuan/Review-Serials WebApi的几点特性 WebApi 提供了几点特性: 1. 自动匹配HTTP方法 GetMethod(), 惯例上会直接匹配Get的http方法

ASP.NET WebApi 开放数据

概述 开放式数据协议(OData) 是用于在 web 数据访问协议.它提供统一的方式来构造数据. 查询的数据和操纵数据集通过 CRUD 操作.它支持 AtomPub (XML) 和 JSON 格式.它还定义的方式来公开元数据有关的数据.客户端可以使用元数据来发现的类型信息和数据集的关系. ASP.NET Web API 容易地创建一个数据集的 OData 终结点.您可以控制到底哪些 OData 操作终结点支持.你可以承载多个 OData 端点,除了非 OData 端点.你有你的数据模型后, 端业