کمی درباره httpmodule
نویسنده: علی یگانه مقدم
تاریخ: ۱۳۹۳/۰۹/۲۶ ۲۰:۱۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
public void Init(HttpApplication app)
{
app.BeginRequest += new EventHandler(OnBeginRequest);
}
public void Dispose(){ } | BeginRequest | این رویداد اولین رویدادی است که اجرا میشود، هر نوع عملی که میخواهید در ابتدای ارسال درخواست انجام دهید، باید در این قسمت قرار بگیرد؛ مثلا قرار دادن یک بنر بالای صفحه |
| AuthenticateRequest | خود دانت از یک سیستم امنیتی توکار بهره مند است و اگر میخواهید در مورد آن خصوصی سازی انجام بدهید، این رویداد میتواند کمکتان کند |
| AuthorizeRequest | بعد از رویداد بالا، این رویداد برای شناسایی انجام میشود. مثلا دسترسی ها؛ دسترسی به قسمت هایی خاصی از منابع به او داده شود و قسمت هایی بعضی از منابع از او گرفته شود. |
| ResolveRequestCache | این رویداد برای کش کردن اطلاعات استفاده میشود. خود دانت تمامی این رویدادها را به صورت تو کار فراهم آورده است؛ ولی اگر باز خصوصی سازی خاصی مد نظر شماست میتوانید در این قسمتها، تغییراتی را اعمال کنید. مثلا ایجاد file caching به جای memory cache و ... |
| AcquireRequestState | این قسمت برای مدیریت state میباشد مثلا مدیریت session ها |
| PreRequestHandlerExecute | این رویداد قبل از httphandler اجرا میشود. |
| PostRequestHandlerExecute | این رویداد بعد از httphandler اجرا میشود. |
| ReleaseRequestState | این رویداد برای این صدا زده میشود که به شما بگوید عملیات درخواست پایان یافته است و باید stateهای ایجاد شده را release یا رها کنید. |
| UpdateRequestCache | برای خصوصی سازی output cache بکار میرود. |
| EndRequest | عملیات درخواست پایان یافته است. در صورتیکه قصد نوشتن دیباگری در طی تمامی عملیات دارید، میتواند به شما کمک کند. |
| PreSendRequestHeaders | این رویداد قبل از ارسال طلاعات هدر هست. اگر قصد اضافه کردن اطلاعاتی به هدر دارید، این رویداد را به کار ببرید. |
| PreSendRequestContent | این رویداد موقعی صدا زده میشود که متد response.flush فراخوانی شود.، اگر میخواهید به محتوا چیزی اضافه کنید، از اینجا کمک بگیرید. |
| Error | این رویداد موقعی رخ میدهد که یک استثنای مدیریت نشده رخ بدهد. برای نوشتن سیستم خطایابی خصوصی از این قسمت عمل کنید. |
| Disposed | این رویداد موقعی صدا زده میشود که درخواست، بنا به هر دلیلی پایان یافته است. برای عملیات پاکسازی و .. میشود از آن استفاده کرد. مثلا یک جور rollback برای کارهای انجام گرفته. |
public class UrlPath : IHttpModule
{
public void Init(HttpApplication app)
{
app.BeginRequest+=new EventHandler(_BeginRequest);
app.EndRequest+=new EventHandler(_EndRequest);
}
public void Dispose()
{
}
void _BeginRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication) sender;
app.Context.Items["start"] = DateTime.Now;
if (app.Context.Request.RawUrl.ToLower().Contains("tours_list.aspx"))
{
app.Context.RewritePath(app.Context.Request.RawUrl.ToLower().Replace("tours_list.aspx","tours_cat.aspx"));
}
}
void _EndRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
string log = (DateTime.Now - DateTime.Parse(app.Context.Items["start"].ToString())).ToString();
Debugger.Log(0,"duration","request took " + log+Environment.NewLine);
}
} <httpModules>
<add name="UrlPath" type="UrlPath"/>
</httpModules> <system.webServer>
<modules>
<add name="UrlRewrite" type="UrlRewrite"/>
</modules>
</system.webServer> <validation validateIntegratedModeConfiguration="false"/>
public class SimpleModule : IHttpModule
{
void IHttpModule.Init(HttpApplication application)
{
application.BeginRequest += new System.EventHandler(BeginRequest);
application.AcquireRequestState += new EventHandler(application_AcquireRequestState);
}
public void BeginRequest(object sender, EventArgs e)
{
// no session here
}
void application_AcquireRequestState(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
app.Session.Add("Message", "hello module");
}
public void Dispose()
{
}
} public void Init(HttpApplication app)
{
app.AcquireRequestState+=new EventHandler(_AUTH);
}
private void _AUTH(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication) sender;
HttpContext context = app.Context;
HttpSessionState session = context.Session;
if(session!=null)
{
string text = "session is not exist";
if (session["userid"] != null)
{
text = "session is exist";
}
context.Response.Write(text);
}
} if (HttpContext.Current.Request.Headers["X-Requested-With"] != "XMLHttpRequest")
{
}