5

小さな管理ページを追加したい ASP.NET MVC Web サイトがあります。私が抱えている問題は、これを全面的に展開し、SSL を利用できないことです。管理者にリモート デスクトップを要求し、ローカル ブラウザを使用して管理を実行することは問題ありません。

これはできますか?<customeErrors mode="RemoteOnly" />基本的に、管理ページを除いて同じ動作を得たいと考えています。どうすればweb.configでこれを行うことができますか?

4

2 に答える 2

13

Request.IsLocalあなたの友達です。

http://msdn.microsoft.com/en-us/library/system.web.httprequest.islocal.aspx

これを使用して、要求がローカル マシンから送信されていることを確認できます。

カスタム属性

これを拡張してカスタム属性にすることもできますが、それはやり過ぎかもしれません。それがあなたが選択したルートである場合、これは同様のことを行う良い例です:

ActionResult のカスタム属性

MVC3以降では、メソッドではなくコントローラーレベルで属性を設定できるため、管理ページを担当するコントローラー全体へのアクセスをロックできます。

于 2013-02-13T16:58:19.497 に答える
9

次のように、カスタム属性を記述してそれを行いました。

public class IsLocalAttribute : AuthorizeAttribute
{
    public bool ThrowSecurityException { get; set; }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var isLocal = httpContext.Request.IsLocal;
        if (!isLocal && ThrowSecurityException)
            throw new SecurityException();
        return isLocal;
    }
}

コントローラー全体での基本的な使用法:

[IsLocal]
public class LocalOnlyController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

または特定の方法で:

public class SomeController : Controller
{
    [IsLocal]
    public ActionResult LocalOnlyMethod()
    {
        return View();
    }
}

302 リダイレクトの代わりにセキュリティ例外をスローする場合:

public class SomeController : Controller
{
    [IsLocal(ThrowSecurityException = true)]
    public ActionResult LocalOnlyMethod()
    {
        return View();
    }
}
于 2014-06-18T10:58:16.370 に答える