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 回答