一旦用户访问[RequireHTTPS]操作,他们就会保持https状态

时间:2013-09-16 08:57:12

标签: asp.net-mvc

我正在使用[RequireHttps]保护我的部分ActionResults,并且效果很好。

人们在转到其他链接后会保持https连接。我只想在我指定的某些页面上使用https,我想在其他所有页面上使用http。

1 个答案:

答案 0 :(得分: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);
    }
}