私は少しネットに新しいですし、いくつかの概念を把握しようとしています。.net MVC 3リクエストイベント
私はColdFusionでしばらく書いていますが、CFにはonRequest()というApplication.cfcの下にイベントがあり、ページがあるたびに起動します。
リクエスト情報をキャプチャするのに.netの何が使用されていますか?
さらに、自分のイベントを起動させるためにRequestイベントをラッチしたり延長したりする方法はありますか?
私は少しネットに新しいですし、いくつかの概念を把握しようとしています。.net MVC 3リクエストイベント
私はColdFusionでしばらく書いていますが、CFにはonRequest()というApplication.cfcの下にイベントがあり、ページがあるたびに起動します。
リクエスト情報をキャプチャするのに.netの何が使用されていますか?
さらに、自分のイベントを起動させるためにRequestイベントをラッチしたり延長したりする方法はありますか?
のようなものがあり、と呼ばれるものが欲しいでしょう。のアクションがヒットします。あなたが次のことを行うことができ、現在の要求にアクセスするには
:
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;
}
あなたは内のすべてのコントローラにこれをアクセスしたい場合、あなたはおそらくベースコントローラを作成する必要があり、そこにこれを追加します。
public class BaseController : Controller
{
//Code above
}
そして、あなたのホームコントローラで:
public class HomeController : BaseController
{
}
あなたはまた、Global.asaxのファイルを見つけることができますし、(たとえばBeginRequest
用)HttpApplication
クラスのイベントのいずれかを使用します。
http://msdn.microsoft.com/en-us/library/system.web.httpapplication.aspx
HttpApplication
はRequest
です。
コントローラ(画像、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を)2つのエントリを追加:
<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に2つのエントリを追加する必要があります。
LukLedあなたは私のためにHttpModuleで少し詳しく教えてもらえますか? – jcreamer898
@ jcreamer898:HttpModuleを作成するためのコードをいくつか追加しました。あなたはまた、Googleで多くのチュートリアルを見つけることができます。 – LukLed
これは、MVCのかなり重い手のアプローチです。 ASP.NET MVCでは、OnActionExecutingやアクションフィルターは、他の答えが示唆しているように、より良いアプローチです。 –
ASP.NET MVC 3で作業している場合は、ASP.NETアプリケーション/リクエストスタックに直接タップするのではなく、グローバルアクションフィルタを使用することをお勧めします。
いいえ、すべてのコントローラーで使用する場合は、グローバルアクションフィルターを使用する必要があります。コンポジション>継承。 – Ryan
@ライアン - ギャングオブフォー以外のものは読んでいますか?私は、グローバルなアクションフィルタは、多くの状況で過度の攻撃であると主張します。 –
私はちょうど個人的な経験から話しています。私のアドバイスは、何があなたのために働くのか把握するためにさまざまな方法で試してみることです。 – Ryan