1

私のリクエストのいくつかは次のようになります。

http://mydomain.com/?q=value

また、BeginRequest で処理されます。これらのリクエストが、ホームページをレンダリングする Home.Index コントローラー アクションに到達しないようにします。

使ってみた

HttpContext.Current.ApplicationInstance.CompleteRequest();

また

Requst.End();

しかし、これらの問題は、パイプラインを完全に遮断して、他のコードの実行を完全に妨げてしまうことです。特に、パイプライン イベントにフックする NewRelic によって行われる分析です。

では、 BeginRequest でリクエストを処理した後、コントローラーだけが実行されないようにするにはどうすればよいでしょうか?

4

2 に答える 2

1

これまでに見つけた最良の解決策は、グローバルアクションフィルターを追加することです

GlobalFilters.Filters.Add(new GlobalActionAbortAttribute ());

BeginRequest で、現在のコンテキストをフラグでマークします

Context.Items["SkipRequest"] = true;

フィルターでは、フラグが存在する場合にすべてのアクションを除外します

public class GlobalActionAbortAttribute : System.Web.Mvc.ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if ((bool?)HttpContext.Current.Items["SkipRequest"] == true)
            filterContext.Result = new EmptyResult();
        else
            base.OnActionExecuting(filterContext);
    }
}
于 2012-12-02T09:09:30.373 に答える
0

ここでのより簡単なオプションは、リクエストがコントローラーに到達してこのシナリオを検出し、ビューではなくContent()を返すことを許可することです。

このパラメーターを探すカスタムクエリ文字列ルート制約を設定することもできます。このパラメーターがある場合は、操作を実行してContent()を返すコントローラーにリダイレクトします。クエリ文字列制約のサンプルコードは次のとおりです。MVC2アプリでルートを指定できますかクエリ文字列パラメータの制約?

于 2012-12-01T22:59:09.877 に答える