티스토리 뷰
[ASP.NET Core] Middleware, IHttpModule과 IHttpHandler 마이그레이션
POWERUMC 2016. 11. 16. 09:38ASP.NET Core Middleware
ASP.NET Core Middleware 는 모든 요청과 응답을 처리하는 파이프라인이다. 레거시 ASP.NET 과 ASP.NET MVC 에서는 이를 IHttpModule
과 IHttpHandler
를 통해 구현하여 처리하거나, Global.asax.cs
에서 처리 가능하다.
IHttpModule
이 주로 사용되는 경우는 권한 처리 등과 같이 다양하게 사용된다. 모든 요청은 이 IHttpModule
을 파이프라인을 통과하게 되고, 응답을 제어할 수 있기 때문이다.
이 파이프라인이 오늘에 와서 ASP.NET Core Middleware 에서 그 역할을 대신하게 된다.
- 레거시에서 파이프라인
최초 레거시 ASP.NET 은 ‘ASP.NET 파이프라인’은 최초 요청부터 마지막 응답까지 컨텍스트가 흐르는 순서가 있다. 이것이 IIS 7.0 부터 IIS 서버와 통합이 되었다.
아래 그림은 IIS 7.0의 응용 프로그램 생명주기(즉 파이프라인)이다.
https://msdn.microsoft.com/en-us/library/bb470252.aspx
- ASP.NET Core Middleware
ASP.NET Core 는 크로스플랫폼을 지향하는데, IIS 는 마이크로소프트 윈도우에서만 실행 가능한 웹/응용프로그램 서버이다. 따라서 ASP.NET Core 를 크로스플랫폼에서 호스팅하려면 IIS 서버에서 적용되었던 파이프라인 개념을 버려야 했다. 그래서 나온 개념이 Middleware 다.
Middleware 또한 IHttpModule
이 수행하는 요청과 응답을 제어하는 역할을 한다.
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware
다만, Global.asax.cs 에서 Session 생성/소멸과 같은 이벤트를 Middleware 만으로는 세세하게 제어하지 못한다. 아마도 다른 접근 포인트가 있는지 좀 찾아봐야 겠다.
IHttpMoudle과 IHttpHandler 마이그레이션
자세한 마이그레이션 과정이 MSDN 문서에 훌륭하게 설명되어 있어서 링크로 대체하고, 간단한 샘플만 남긴다.
참고로 Middleware는 UseMvc()
메서드 이전에 남겨야 한다. 그렇지 않으면, Middleware 가 동작하지 않는다.
Startup.cs
public class Startup
{
// 생략...
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseApplicationInsightsRequestTelemetry();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseApplicationInsightsExceptionTelemetry();
app.UseStaticFiles();
// 미들웨어 등록
app.UseMiddleware<FrameworkMiddleware>();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
FrameworkMiddleware.cs
public class FrameworkMiddleware
{
private readonly RequestDelegate next;
public FrameworkMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task Invoke(HttpContext context)
{
Console.WriteLine("==========================================");
await next(context);
Console.WriteLine("------------------------------------------");
}
}
자세한 내용은 아래 링크를 방문하기 바란다.
https://docs.microsoft.com/en-us/aspnet/core/migration/http-modules
'.NET > ASP.NET' 카테고리의 다른 글
[ASP.NET Core] IControllerFactory 설정 및 마이그레이션 (0) | 2016.11.15 |
---|---|
[ASP.NET] Session state has created a session id, but cannot save it because the response was already flushed (0) | 2016.08.09 |
ASP.NET WebForm 에서 Dependency Injection 사용하는 방법 (0) | 2016.02.28 |
memcached, 분산 캐시를 이용하여 분산 Session 성능 향상 (2/2) (0) | 2013.05.21 |
memcached, 분산 캐시를 이용하여 분산 Session 성능 향상 (1/2) (0) | 2013.05.20 |
- Total
- Today
- Yesterday
- ***** MY SOCIAL *****
- [SOCIAL] 페이스북
- [SOCIAL] 팀 블로그 트위터
- .
- ***** MY OPEN SOURCE *****
- [GITHUB] POWERUMC
- .
- ***** MY PUBLISH *****
- [MSDN] e-Book 백서
- .
- ***** MY TOOLS *****
- [VSX] VSGesture for VS2005,200…
- [VSX] VSGesture for VS2010,201…
- [VSX] Comment Helper for VS200…
- [VSX] VSExplorer for VS2005,20…
- [VSX] VSCmd for VS2005,2008
- .
- ***** MY FAVORITES *****
- MSDN 포럼
- MSDN 라이브러리
- Mono Project
- STEN
- 일본 ATMARKIT
- C++ 빌더 포럼
- .
- POWERUMC
- Visual Studio 11
- .NET
- Team Foundation Server 2010
- Team Foundation Server
- umc
- c#
- monodevelop
- Managed Extensibility Framework
- LINQ
- MEF
- testing
- TFS
- TFS 2010
- Silverlight
- 엄준일
- 팀 파운데이션 서버
- github
- ALM
- test
- ASP.NET
- 땡초
- Visual Studio 2008
- 비주얼 스튜디오 2010
- .NET Framework 4.0
- Visual Studio
- 비주얼 스튜디오
- Visual Studio 2010
- mono
- Windows 8
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |