1

基本ページクラスを使用する以外に、asp.net4.5の.aspxまたは.cshtmlページへのリクエストごとに実行されるコードを記述する方法はありますか。これは非常に巨大なプロジェクトであり、ベースページを使用するためにすべてのページに変更を加えることは悪夢です。また、クラスがないため、cshtmlページに対してこれがどのように行われるのかわかりません。

Webサイトは統合モードで実行されているため、 Application_BeginRequestを使用して、aspxファイルとcshtmlファイルのみをターゲットにすることはできますか?

基本的に、Webサイトにアクセスしているユーザーがデータベースに対して特定のIPアドレスを持っているかどうかを確認し、持っている場合はアクセスを許可し、そうでない場合はリダイレクトする必要があります。

IIS8とASP.Net4.5およびASP.NetRazorWebページを使用しています

4

2 に答える 2

1

また、クラスがないため、cshtmlページに対してこれがどのように行われるのかわかりません。

_ViewStart.cshtmlリクエストごとに内容が実行されるファイルを配置できます。

または、次のように書くこともできますcustom Http Module

public class MyModule: IHttpModule
{
    public void Init(HttpApplication app)
    {
        app.BeginRequest += new EventHandler(OnBeginRequest);
    }

    public void Dispose()
    { 

    }   

    public void OnBeginRequest(object s, EventArgs e)
    {
        // this code here's gonna get executed on each request
    }
}

次に、このモジュールをweb.configに登録するだけです。

<system.webServer>
    <modules>
        <add name="MyModule" type="SomeNamespace.MyModule, SomeAssembly" />
    </modules>
    ...
</system.webServer>

または、クラシックモードで実行している場合:

<system.web>
    <httpModules>
        <add name="MyModule" type="SomeNamespace.MyModule, SomeAssembly" />
    </httpModules>
</system.web>

基本的に、Webサイトにアクセスしているユーザーがデータベースに対して特定のIPアドレスを持っているかどうかを確認し、持っている場合はアクセスを許可し、そうでない場合はリダイレクトする必要があります。

メソッド内でOnBeginRequest、現在のユーザーIPを取得できます。

    public void OnBeginRequest(object sender, EventArgs e)
    {
        var app = sender as HttpApplication;
        var request = app.Context.Request;
        string ip = request.UserHostAddress;
        // do your checks against the database
    }
于 2013-03-25T07:01:02.747 に答える
1

Asp.net MVCフィルターは、その目的のために特別に設計されています。

このようにActionFilterAttributeを実装します(おそらく、この新しいクラスをWebアプリケーションソリューションのFiltersフォルダーに配置します)。

public class IpFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        string ip = filterContext.HttpContext.Request.UserHostAddress;

        if(!testIp(ip))
        {
            if (true /* You want to use a route name*/)
                filterContext.Result = new RedirectToRouteResult("badIpRouteName");
            else /* you want an url */
                filterContext.Result = new RedirectResult("~/badIpController/badIpAction");
        }

        base.OnActionExecuting(filterContext);
    }
    private bool testIp(string inputIp)
    {
        return true /* do you ip test here */;
    }
}

次に、IpFilterを使用してipcheckを実行するアクションを次のように装飾する必要があります。

    [IpFilter]
    public ActionResult AnyActionWhichNeedsGoodIp()
    {
         /* do stuff */
    }
于 2013-03-25T10:32:24.443 に答える