.net에 조금 익숙하며 몇 가지 개념을 파악하려고합니다..net MVC 3 요청 이벤트
나는 ColdFusion에서 잠시 글을 쓰고 있으며 CF에서는 onRequest()라는 Application.cfc 아래에 이벤트가 있습니다.이 이벤트는 페이지가있을 때마다 발생합니다.
.net에서 요청 정보를 캡처하는 데 사용되는 항목은 무엇입니까?
또한 내 이벤트를 시작하기 위해 요청 이벤트를 래치하거나 연장하는 방법이 있습니까?
.net에 조금 익숙하며 몇 가지 개념을 파악하려고합니다..net MVC 3 요청 이벤트
나는 ColdFusion에서 잠시 글을 쓰고 있으며 CF에서는 onRequest()라는 Application.cfc 아래에 이벤트가 있습니다.이 이벤트는 페이지가있을 때마다 발생합니다.
.net에서 요청 정보를 캡처하는 데 사용되는 항목은 무엇입니까?
또한 내 이벤트를 시작하기 위해 요청 이벤트를 래치하거나 연장하는 방법이 있습니까?
과 같은 것이 있는데, 이라고 부르기 전에 액션이 적용됩니다. 당신이 모든 컨트롤러에이 액세스하려는 경우 그때는 아마 기본 컨트롤러를 만들어야합니다,
protected virtual void OnActionExecuting(ActionExecutingContext filterContext) {
//Do the default OnActionExecuting first.
base.OnActionExecuting(filterContext);
//The request variable will allow you to see information on the current request.
var request = filterContext.RequestContext.HttpRequest;
}
그곳이 추가
는 다음을 수행 할 수있는 현재의 요구에 액세스 할 수 있습니다. 또한 Global.asax에 파일을 찾습니다 (예BeginRequest
에 대한)
HttpApplication
클래스의 이벤트 중 하나를 사용할 수 있습니다
public class HomeController : BaseController
{
}
:
http://msdn.microsoft.com/en-us/library/system.web.httpapplication.aspx
을public class BaseController : Controller
{
//Code above
}
그리고 홈 컨트롤러
HttpApplication
은 Request
속성을가집니다.
Controller (이미지, CSS, 잘못된 주소)와 관련된 모든 요청을 캐치 할 수 있습니다. 당신은 Global.asax 파일의 코드를 작성하지 않으려면
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_BeginRequest(object sender, EventArgs e)
{
//Request.Have_fun
}
}
, 당신은
HttpModule
을 사용하는 것이 좋습니다.
이 예제 코드와 함께 새로운 클래스를 만듭니다
using System;
using System.Web;
namespace MyProject
{
public class MyHttpModule : IHttpModule
{
public void Init(HttpApplication application)
{
application.BeginRequest += ApplicationBeginRequest;
application.EndRequest += ApplicationEndRequest;
}
private void ApplicationEndRequest(object sender, EventArgs e)
{
//do something here with HttpContext.Current.Request
}
private static void ApplicationBeginRequest(Object source, EventArgs e)
{
//do something here with HttpContext.Current.Request
}
public void Dispose()
{
}
}
}
은 Web.config의에서 (레지스터 HttpModule을) 두 개의 항목을 추가
<system.web>
<httpModules>
<add name="MyHttpModule" type="MyProject.MyHttpModule" />
</httpModules>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="MyHttpModule" type="MyProject.MyHttpModule" />
</modules>
</system.webserver>
때문에 IIS7의 변화를 (추가의 system.webServer 섹션) , web.config에 두 개의 항목을 추가해야합니다.
LukLed 나에게 HttpModule에 대해 좀 더 자세히 설명해 주시겠습니까? – jcreamer898
@ jcreamer898 : HttpModule을 만들기위한 코드를 추가했습니다. 또한 Google에서 많은 자습서를 찾을 수 있습니다. – LukLed
이것은 MVC를위한 매우 무거운 수동 방식입니다. ASP.NET MVC에서는 'OnActionExecuting'또는 액션 필터가 다른 답변과 마찬가지로 더 나은 접근 방식이라고 제안합니다. –
ASP.NET MVC 3에서 작업하는 경우 ASP.NET 응용 프로그램/요청 스택에 직접 두드리는 대신 전역 작업 필터 (처리하려는 "이벤트"당 하나 사용)를 사용하는 것이 좋습니다.
아니요, 모든 컨트롤러에 사용하려면 전역 작업 필터를 사용해야합니다. 작문> 상속. – Ryan
@ Ryan - Four Gang 이외의 다른 것을 읽나요?! 나는 글로벌 액션 필터가 많은 상황에서 과잉이라고 주장 할 것이다. –
나는 개인적인 경험으로 말하고있다. 나의 조언은 당신에게 맞는 것이 무엇인지 알아 내기 위해 여러 가지 방법으로 시도하는 것이다. – Ryan