티스토리 뷰
Supporting OData Query Options - Visual Studio 2013
kaki104 2013. 11. 28. 12:15Visual Studio 2013에서 ApiController를 이용해서 OData Query를 사용하는 방법에 대해 포스팅한다.
참고 포스트
Supporting OData Query Options
http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options
이 포스트의 핵심은 기존 ApiController를 이용해서도 OData쿼리를 할 수 있다는 내용이다.(사실 이것이 정상이지..처음에는 되었다가 나중에 않되었다가 다시 풀어준..그런 기가막힌 사연을 가지고 있다)
PCLSample.WebAPI 프로젝트를 추가했다.
기본 프로젝트는 이전 포스트 처럼 Empty템플릿과 WebAPI만을 선택해서 만든 후 추가적인 Nuget packages를 추가한다.
* Nuget packages : 필수 항목만 나열한다.
EntityFramework : Database 연동을 하기 위한 프레임웍
Microsoft ASP.NET Web API OData : OData Query를 사용하기 위한 필수 항목
Portable IoC : IoC를 사용하기 위한 패키지
그외 나머지 내용들은 위의 내용 설치시 함께 설치가 되거나, PCL에서 사용하는 패키지들이라 함께 설치한 것이다.
위의 패키지들을 설치한 후
WebApiConfig.cs
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.EnableQuerySupport(); //OData Query 사용 가능 옵션 활성화
}
PeopleController.cs
public class PeopleController : ApiController
{
private IUnitOfWork _uow;
public PeopleController()
{
_uow = GlobalVariables.Container.Resolve<IUnitOfWork>();
}
/// <summary>
/// 조회
/// </summary>
/// <returns></returns>
[Queryable]
public IQueryable<PersonModel> Get()
{
return _uow.PeopleRepo.AllGetting();
}
}
GlobalVariables.cs
전역에서 사용할 스택틱 클래스 선언
public static class GlobalVariables
{
private static IPortableIoC _container;
/// <summary>
/// PortableIoC Conatiner
/// </summary>
public static IPortableIoC Container
{
get { return _container = _container ?? new PortableIoc(); }
private set { _container = value; }
}
}
Global.asax
ApiController에서 사용할 인터페이스를 등록하고, 데이터 베이스 초기화할때 실행할 내용을 지정한다.
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
//Regiser user interface
GlobalVariables.Container.Register<IUnitOfWork>(ioc => new UnitOfWork());
//db init
System.Data.Entity.Database.SetInitializer(new PCLSampleContextInitializer());
}
Web.config
Database연결 문자열은 자신의 환경에 맞게 수정한다.
...
<connectionStrings>
<add name="PCLSampleContext" connectionString="Data Source=(local)\sqlexpress;Initial Catalog=PCLSample;Integrated Security=SSPI" providerName="System.Data.SqlClient" />
</connectionStrings>
...
F5로 실행
웹 페이지가 없기 때문에 별 내용은 나오지 않는다.
주소창에 http://localhost:59409/api/People 입력
결과 (서비스가 시작되면서 db가 생성되었을때 Seed가 입력되어 있음)
[{"Id":1,"Age":20,"Name":"kaki104","Sex":true}
,{"Id":2,"Age":21,"Name":"kaki105","Sex":false}
,{"Id":3,"Age":22,"Name":"kaki106","Sex":true}
,{"Id":4,"Age":23,"Name":"kaki107","Sex":false}
,{"Id":5,"Age":24,"Name":"kaki108","Sex":true}]
http://localhost:59409/api/People?$filter=Name eq 'kaki105'
결과
[{"Id":2,"Age":21,"Name":"kaki105","Sex":false}]
http://localhost:59409/api/People?$skip=2&$top=2
결과
[{"Id":3,"Age":22,"Name":"kaki106","Sex":true},{"Id":4,"Age":23,"Name":"kaki107","Sex":false}]
쿼리 옵션이나 추가 기능은 참고 포스트를 보면 나와있다
ODataController인 경우에는 기본적으로 OData Query를 사용할 수 있다.
전체 소스
'Previous Platforms > HTML5 & MVC4' 카테고리의 다른 글
Individual Accounts in ASP.NET Web API - Visual Studio 2013 (0) | 2013.12.05 |
---|---|
WebAPI CRUD, Repository, PCL - Visual Studio 2013 (0) | 2013.11.29 |
Creating an OData Endpoint in ASP.NET Web API - Visual Studio 2013 (0) | 2013.11.27 |
OData Endpoint with ASP.NET Web API Part3 - Clients (0) | 2013.10.15 |
OData Endpoint with ASP.NET Web API Part2 - Web (0) | 2013.10.15 |
- Total
- Today
- Yesterday
- UWP
- WPF
- XAML
- C#
- Visual Studio 2022
- visual studio 2019
- ComboBox
- MVVM
- LINQ
- Behavior
- Bot Framework
- #MVVM
- .net
- windows 11
- uno platform
- Always Encrypted
- IOT
- kiosk
- Microsoft
- uno-platform
- PRISM
- ef core
- #uwp
- #prism
- dotNETconf
- #Windows Template Studio
- .net 5.0
- Build 2016
- Cross-platform
- Windows 10
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |