2

ASP.NET MVC4 を使用して、次のようなアクション フィルター属性を作成したいと考えています。

 public class ForceHttps : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {...

私が望むのは、https が必要なコントローラーにその属性を割り当てることです。他のすべてのコントローラーには、Http を強制する別の OnActionExecuting が必要です。他のすべてのコントローラーを [ForceNoHttps] で装飾することもできますが、それは機能しますが、私の好みはデフォルトを [ForceNoHttps] にすることであり、[ForceHttps] を指定した場合にのみ、このメソッドが実行され、他のメソッドは実行されません。

したがって、両方ではなく、どちらか一方を実行する必要があります。あれは、

if {[ForceHttps] is on controller} ページを強制的に https にする else ページを強制的に http にする

わかる?私はこれを行うことができますか?

ありがとう

4

1 に答える 1

1

あなたが望むのは次のようなものだと思います:

public class NotHttpsAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (request.IsSecureConnection)
        {
            string redirectUrl = filterContext.HttpContext.
                 Request.Url.ToString().Replace("https:", "http:");
            filterContext.HttpContext.Response.Redirect(redirectUrl);
        }
        base.OnActionExecuting(filterContext);
    }
}

ここでの問題は、https ではないすべてのコントローラー/アクションにこのフィルターを適用する必要があることです。

プログラミングの負担を軽減する方法は、負担を登録することです。それは、Global.asax に登録して、NotHttps をグローバル フィルターにすることです。

public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
    filters.Add(new NotHttpsAttribute()  { Order = 0 });
}
于 2013-05-04T03:21:53.703 に答える