RemoteRequiresHTTPSMVC5我有以下属性保证远程站点页面以https方式打开。公共类RemoteRequireHttpsAttribute:RequireHttpsAttribute{publicoverridevoidOnAuthorization(AuthorizationContextfilterContext){if(filterContext==null){}if(filterContext!=null&&filterContext.Ht=(filterContext.HttpContext.Request.IsLocal){return;}else{stringval=ConfigurationManager.AppSettings["RequireSSL"].Trim();boolrequireSsl=bool.Parse(val);if(!requireSsl){return;}}}base.OnAuthorization(filterContext);}}本地开发现在工作正常,因为我不希望它以https模式打开。开发站点以https模式打开页面-否问题在这里(单节点)。我正在设置的生产(负载平衡-2个节点)站点在哪里,给我以下错误。请注意,开发站点和生产站点具有相同的设置,并且web.config页面没有正确重定向Firefox有检测到服务器正在以一种永远不会完成的方式重定向对此地址的请求。这个问题有时可能是由于禁用或拒绝接受cookie引起的。开发站点url类似于http://dev.datalab.something.org生产站点url类似于http://datalab.something.org这里是调用[RemoteRequireHttps]publicActionResultIndex(stringreturnUrl,stringerror)我是什么这里缺少什么?更新1:我的管理员已确认在ladbalancerevel上设置了SSL终止。我检查了iis站点设置,但没有看到https绑定。我只看到http绑定。他还需要设置https绑定吗?更新2:@AlexeiLevenkov为我指明了正确的方向,这篇文章包含我使用的代码并且它正在运行。将代码移至单独的答案中。您的网站是一个支持SSL终止的负载平衡器-因此无论用户看到什么,您网站的所有传入流量都是HTTP。这会导致您的代码始终尝试重定向到HTTPS版本,从而无限循环。修复选项:如何调查这样的问题:并不是说我反对编写好的自定义属性,也许在web.config中进行重定向并使用可在web.config中使用的转换将启用的值从false更改在生产部署中是真的没有意义吗?正如@AlexeiLevenkov所指出的那样,将修复程序移至单独的答案中。公共类RemoteRequireHttpsAttribute:RequireHttpsAttribute{publicoverridevoidOnAuthorization(AuthorizationContextfilterContext){if(filterContext==null){}if(filterContext.HttpContext!=null){if(filterContext.HttpContext.Request.IsSecureConnection){返回;}varcurrentUrl=filterContext.HttpContext.Request.Url;如果(currentUrl.Scheme.Equals(Uri.UriSchemeHttps,StringComparison.CurrentCultureIgnoreCase)){返回;}if(string.Equals(filterContext.HttpContext.Request.Headers["X-Forwarded-Proto"],"https",StringComparison.InvariantCultureIgnoreCase)){返回;}如果(filterContext.HttpContext.Request.IsLocal){返回;}varval=ConfigurationManager.AppSettings["RequireSSL"].Trim();varrequireSsl=bool.Parse(val);如果(!requireSsl){返回;}}base.OnAuthorization(filterContext);我也更新了ExitHttps属性。这个有类似的问题。。。以上就是C#学习教程:RemoterequiresHTTPSMVC5分享的全部内容,如果对大家有用,需要详细了解C#学习教程,希望大家多多付出注意它——publicclassExitHttpsAttribute:FilterAttribute,IAuthorizationFilter{publicvoidOnAuthorization(AuthorizationContextfilterContext){if(filterContext==null){thrownewArgumentException("FilterContext");}if(filterContext.HttpContext==null){返回;}varisSecure=filterContext.HttpContext.Request.IsSecureConnection;varcurrentUrl=filterContext.HttpContext.Request.Url;如果(!isSecure&¤tUrl.Scheme.Equals(Uri.UriSchemeHttps,StringComparison.CurrentCultureIgnoreCase)){isSecure=true;}if(!isSecure&&filterContext.HttpContext.Request.Headers["X-Forwarded-Proto"],"https",StringComparison.InvariantCultureIgnoreCase)){isSecure=true;}if(isSecure){//在这些情况下保持https//如果[RequireHttps]属性应用于控制器或操作则中止if(filterContext.ActionDescriptor.ControlllerDescriptor.GetCustomAttributes(typeof(RequireHttpsAttribute),true).Length>0){isSecure=false;}if(isSecure&&filterContext.ActionDescriptor.GetCustomAttributes(typeof(RequireHttpsAttribute),true).Length>0){isSecure=false;}//如果[RetainHttps]属性应用于控制器或操作,则中止if(isSecure&&filterContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes(typeof(RetainHttpsAttribute),true).Length>0){isSecure=false;}if(isSecure&&filterContext.ActionDescriptor.GetCustomAttributes(typeof(RetainHttpsAttribute),true).Length>0){isSecure=false;}//如果不是GET请求则中止-我们不想在表单上重定向是安全的=假的;}}如果(!isSecure){返回;}//重定向到HTTPvarurl="http://"+filterContext.HttpContext.Request.Url.Host+filterContext.HttpContext.Request.RawUrl;filterContext.Result=newRedirectResult(url);}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
