重定向在ASP.NET MVC SSL动作过滤器循环 [英] Redirect loop with SSL action filter in ASP.NET MVC
问题描述
我使用的是ActionFilter(见下文)来检测电流控制器/动作与否1.需要SSL,目前正在使用的2 SSL,并相应地重定向。
这本地工作正常(使用IIS 7的虚拟CERT),但一旦我得到它在服务器上,我得到指示无限重定向循环错误。
任何想法?
公共类SslFilter:ActionFilterAttribute
{
公共SslFilter(布尔sslRequired)
{
SslRequired = sslRequired;
} 公共BOOL SslRequired {搞定;组; }
公共覆盖无效OnActionExecuting(ActionExecutingContext filterContext)
{
HTT prequestBase REQ = filterContext.HttpContext.Request;
HTT presponseBase解析度= filterContext.HttpContext.Response; VAR建设者=新UriBuilder(req.Url); 如果(SslRequired&安培;&安培;!req.IsSecureConnection)
{
builder.Scheme = Uri.UriSchemeHttps;
builder.Port = 443;
res.Redirect(builder.Uri.ToString()); }
否则,如果(SslRequired&安培;!&安培; req.IsSecureConnection)
{
builder.Scheme = Uri.UriSchemeHttp;
builder.Port = 80;
res.Redirect(builder.Uri.ToString());
} base.OnActionExecuting(filterContext);
}
}
Firefox的错误:
页面没有正确重定向
火狐已检测到服务器
被重定向这个请求
在某种程度上解决这个永远
完整的。
此问题有时可以引起
通过禁用或拒绝接受
饼干。
块引用>解决方案尝试更MVCish方式重定向:
VAR建设者=新UriBuilder(req.Url);如果(SslRequired&安培;&安培;!req.IsSecureConnection)
{
builder.Scheme = Uri.UriSchemeHttps;
builder.Port = 443;
filterContext.Result =新RedirectResult(builder.Uri.ToString());
filterContext.Cancel =真;
}
否则,如果(SslRequired&安培;!&安培; req.IsSecureConnection)
{
builder.Scheme = Uri.UriSchemeHttp;
builder.Port = 80;
filterContext.Result =新RedirectResult(builder.Uri.ToString());
filterContext.Cancel =真;
}
其他
{
base.OnActionExecuting(filterContext);
}I am using an ActionFilter (see below) to detect whether or not 1. the current controller/action requires SSL and 2. SSL is currently being used, and redirect accordingly.
This works fine locally (using a dummy cert in IIS 7) but once I get it up on the server I get an error indicating an infinite redirect loop.
Any ideas?
public class SslFilter : ActionFilterAttribute { public SslFilter(bool sslRequired) { SslRequired = sslRequired; } public bool SslRequired { get; set; } public override void OnActionExecuting(ActionExecutingContext filterContext) { HttpRequestBase req = filterContext.HttpContext.Request; HttpResponseBase res = filterContext.HttpContext.Response; var builder = new UriBuilder(req.Url); if (SslRequired && !req.IsSecureConnection) { builder.Scheme = Uri.UriSchemeHttps; builder.Port = 443; res.Redirect(builder.Uri.ToString()); } else if (!SslRequired && req.IsSecureConnection) { builder.Scheme = Uri.UriSchemeHttp; builder.Port = 80; res.Redirect(builder.Uri.ToString()); } base.OnActionExecuting(filterContext); } }
Firefox error:
The page isn't redirecting properly
Firefox has detected that the server is redirecting the request for this address in a way that will never complete.
This problem can sometimes be caused by disabling or refusing to accept cookies.
解决方案Try redirecting in a more MVCish way:
var builder = new UriBuilder(req.Url); if (SslRequired && !req.IsSecureConnection) { builder.Scheme = Uri.UriSchemeHttps; builder.Port = 443; filterContext.Result = new RedirectResult(builder.Uri.ToString()); filterContext.Cancel = true; } else if (!SslRequired && req.IsSecureConnection) { builder.Scheme = Uri.UriSchemeHttp; builder.Port = 80; filterContext.Result = new RedirectResult(builder.Uri.ToString()); filterContext.Cancel = true; } else { base.OnActionExecuting(filterContext); }
这篇关于重定向在ASP.NET MVC SSL动作过滤器循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!