【发布时间】: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