1

私は ActionResults のいくつかを保護していますが、それはうまく機能し[RequireHttps]ています。

他のリンクに移動した後も、人々は https 接続を維持しています。指定した特定のページでのみ https が必要で、それ以外はすべて http が必要です。

4

1 に答える 1

1

OnActionExecutingベースコントローラーを作成して、メソッドをオーバーライドして次のようなことを行うことができます。

protected override void OnActionExecuting(ActionExecutingContext ctx) {
{
    bool redirect = true;
    if (!ctx.HttpContext.Request.IsSecureConnection) redirect = false;

    // Bypass if [RequireHttps] is applied
    if (ctx.ActionDescriptor.ControllerDescriptor.GetCustomAttributes
        (typeof(RequireHttpsAttribute), true).Length > 0) redirect = false;
    if (ctx.ActionDescriptor.GetCustomAttributes
        (typeof(RequireHttpsAttribute), true).Length > 0) redirect = false;

    if (!redirect)
    {
        base.OnActionExecuting(ctx);
    }
    else
    {
        // Redirect to HTTP
        string url = "http://" + ctx.HttpContext.Request.Url.Host 
            + ctx.HttpContext.Request.RawUrl;

        ctx.Result = new RedirectResult(url);
    }
}
于 2013-09-16T09:06:47.890 に答える