C# - OWIN Web API 예제 프로젝트
지난번에 만들어 둔 OWIN 예제에,
C# - OWIN 예제 프로젝트 만들기
; https://www.sysnet.pe.kr/2/0/12479
아래의 글을 따라,
Use OWIN to Self-Host ASP.NET Web API
; https://docs.microsoft.com/en-us/aspnet/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api
Web API를 추가해 볼 텐데요, 이를 위해 우선 2개의 패키지를 참조 추가해야 합니다.
Install-Package Microsoft.AspNet.WebApi.Core
Install-Package Microsoft.AspNet.WebApi.Owin
그런 다음 기존 소스 코드의 Startup.Configuration 메서드를 이렇게 변경하고,
// https://github.com/aspnet/samples/blob/master/samples/aspnet/WebApi/OwinSelfhostSample/OwinSelfhostSample/Startup.cs
using Microsoft.Owin;
using Owin;
using System;
using System.Threading.Tasks;
using System.Web.Http;
[assembly: OwinStartup(typeof(OwinWebApp.Startup))]
namespace OwinWebApp
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
app.UseWebApi(config);
app.Run(context =>
{
context.Response.ContentType = "text/plain";
return context.Response.WriteAsync("Hello, world.");
});
}
}
}
마지막으로 전형적인 Web API Controller 코드를 구현하면 마무리가 됩니다.
// https://github.com/aspnet/samples/blob/master/samples/aspnet/WebApi/OwinSelfhostSample/OwinSelfhostSample/ValuesController.cs
using System.Collections.Generic;
using System.Web.Http;
namespace OwinWebApp
{
public class ValuesController : ApiController
{
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
public string Get(int id)
{
return "value";
}
// POST api/values
public void Post([FromBody] string value)
{
}
// PUT api/values/5
public void Put(int id, [FromBody] string value)
{
}
// DELETE api/values/5
public void Delete(int id)
{
}
}
}
이후, "http://localhost:[port]/api/values"로 접근하면 ValuesController.Get 메서드가 실행되는 것을 확인할 수 있습니다.
참고로, Controller에 Route 특성을 명시해 라우트 경로를 바꾸고 싶다면,
using System.Collections.Generic;
using System.Web.Http;
namespace OwinWebApp
{
[Route("services")]
public class ValuesController : ApiController
{
// ...[생략]...
}
}
Startup.Configuration 메서드에 MapHttpAttributeRoutes 메서드 호출만 더 추가하면 됩니다.
using Microsoft.Owin;
using Owin;
using System;
using System.Threading.Tasks;
using System.Web.Http;
[assembly: OwinStartup(typeof(OwinWebApp.Startup))]
namespace OwinWebApp
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
app.UseWebApi(config);
}
}
}
그럼, 이제부터는 특성에 지정한 값에 따라 "http://localhost:[port]/api/
services"로 접근할 수 있습니다.
마지막으로, OWIN Web API도 비동기 프레임워크이기 때문에 async/await을 사용할 수 있습니다.
using System.Collections.Generic;
using System.Web.Http;
namespace OwinWebApp
{
public class ValuesController : ApiController
{
public async Task<IEnumerable<string>> Get()
{
await Task.Delay(500);
return new string[] { "value1", "value2" };
}
// ...[생략]...
}
}
(
첨부 파일은 이 글의 예제 코드를 포함합니다.)
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]