2016-10-13 16 views
2

これはオーチャードの質問よりASP.NET MVCの質問のほうが多分ですが、私はどちらも比較的新しく、どちらの場合でも答えは分かりません。リクエストごとに常に実行したいコードはどこに置くべきですか?

ASP.NET MVCアプリケーションは、技術的には単一のエントリポイントを持っていないため、レイヤーや起点やアクセス権に関係なく、いつも誰かがページを訪れるたびに、いつでも実行したいコードを置いています。 ?オーチャードの特定の方法がありますか?

私が特にやっているのは、自分のウェブサイトにアクセスできるIP範囲を制限することです。私はすべての着信要求を見て、ユーザーが認証されているか、自分のカスタム設定で設定した許可された範囲内のIPを持っているかどうかを確認したい。

私はこのチェックをLayoutに入れて、すべてのゾーンの周りに条件をラップするか、またはIThemeSelectorを実装して別のテーマに切り替えるような、すばやく簡単な方法を考えることができますが、正しくしたいと思います。

答えて

4

、あなたがこれを達成するために行う必要があり、次のような新しいIActionFilterまたはIAuthorizationFilterを実施しているすべて:あなただけのコンテンツ項目(のような:ウィジェット、ページ、プロジェクション)に基づいて許可したい場合は

public class CheckAccessFilter : FilterProvider, IActionFilter, IAuthorizationFilter { 
    public void OnActionExecuting(ActionExecutingContext filterContext) { 
     // here you can check the incoming request, and how the system will deal with it, 
     // before executing the action 
    } 

    public void OnActionExecuted(ActionExecutedContext filterContext) { 

    } 

    public void OnAuthorization(AuthorizationContext filterContext) { 
     // here you can authorize any request 
    } 
} 

しかし、 、あなたはIAuthorizationServiceEventHandler実装することができます:あなたは、このアプローチを実装するために従うことができ

public class IPAuthorizationEventHandler : IAuthorizationServiceEventHandler { 
    public void Checking(CheckAccessContext context) { 
    } 

    public void Adjust(CheckAccessContext context) { 
    } 

    public void Complete(CheckAccessContext context) { 
    } 
} 

最高のサンプルがSecurableContentItemsAuthorizationEventHandlerで、あなたはOrchard.ContentPermissionsモジュールでそれを見つけることができます。

+0

これは、このようなコードをどこに置くかについての私の質問に答えました。しかし、「HTTPヘッダーが既に設定された後にリダイレクトできない」ため、私のチェックが失敗した場合に、 'OnResultExecuting'メソッドでリダイレクトできないという問題がありました。これを回避する方法があればどんな考えですか? – Lawyerson

+0

申し訳ありませんが、これは私の間違いです。更新された回答を参照してください。アクションを処理する前に 'IResultFilter'ではなく 'IActionFilter'を使用してリクエストをキャッチしてください。 – mdameer

+0

乾杯、私が知りたいと思ったこと以上のこと! – Lawyerson

関連する問題