【问题标题】:ASP.NET MVC Action Filter Redirect LoopASP.NET MVC 动作过滤器重定向循环
【发布时间】:2010-05-26 08:52:20
【问题描述】:

当我们在控制器类上启用以下属性时,我看到来自生产服务器的重定向循环:

public class TestRedirectHttpsAttribute : RedirectHttpsAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        if (Convert.ToBoolean(ConfigurationManager.AppSettings["TestSecureEnabled"] ?? bool.FalseString))
        {
            base.OnAuthorization(filterContext);
        }
    }
}


public class RedirectHttpsAttribute : FilterAttribute, IAuthorizationFilter
{
    public virtual void OnAuthorization(AuthorizationContext filterContext)
    {
        if (filterContext == null)
        {
            throw new ArgumentNullException("filterContext");
        }

        if (!filterContext.HttpContext.Request.IsSecureConnection)
        {
            UriBuilder uriBuilder = new UriBuilder(filterContext.HttpContext.Request.Url);
            uriBuilder.Scheme = "https";
            uriBuilder.Port = -1; // Don't inject port
            filterContext.Result = new RedirectResult(uriBuilder.ToString());
        }
    }
}

我知道这与问题类似 - Redirect loop with SSL action filter in ASP.NET MVC 但它是在 2 月份提出的,我希望有人可能有更好的解决方案。链接中问题的解决方案是从控制器中的操作重定向,但如果我们想将所有操作重定向到 HTTPS,我们必须确保在每个操作中都调用它,而不是将自定义 FilterAttribute 应用于控制器。

注意:此代码可在我们使用虚拟 SSL 证书的开发环境中运行。

我可能搞错了,应该完全做其他事情,如果是这样,请接受我的道歉。

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    对于可能遇到相同问题的任何人。这是我们的负载均衡器处理 SSL 请求并使用端口 80 传递给我们的 Web 服务器的结果;这导致无法确定安全请求确实是安全的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-04
      • 2019-04-03
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多