如何在ASP.NET页面生命周期中从HTTP重定向到HTTPS?
我有一个ASP.NET页面,添加了很多服务器控件。当用户从HTTP访问页面时,我需要将请求重定向为使用HTTPS。控件在如何在ASP.NET页面生命周期中从HTTP重定向到HTTPS?,asp.net,http,iis-7,ssl,https,Asp.net,Http,Iis 7,Ssl,Https,我有一个ASP.NET页面,添加了很多服务器控件。当用户从HTTP访问页面时,我需要将请求重定向为使用HTTPS。控件在Init方法中动态加载,我在Load方法中执行重定向。但这最终会创建一个循环,加载控件,然后连续重定向 在页面生命周期中,我可以使用哪个事件来处理避免循环的重定向?最早可以挂接并从中重定向的事件是page_PreInit事件,因此我建议在此处执行方案检查和重定向。您应该使用Gloabal.asax文件来完成此操作。.试试这个 代码 如果可用,则应使用IIS重写来执行此操作。规则
Init
方法中动态加载,我在Load
方法中执行重定向。但这最终会创建一个循环,加载控件,然后连续重定向
在页面生命周期中,我可以使用哪个事件来处理避免循环的重定向?最早可以挂接并从中重定向的事件是page_PreInit事件,因此我建议在此处执行方案检查和重定向。您应该使用Gloabal.asax文件来完成此操作。.试试这个 代码
如果可用,则应使用IIS重写来执行此操作。规则是:
<rule name="Redirect to HTTPS" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther" />
</rule>
如果不希望加载控件,则应在页面初始开始时重定向。我使用类似这样的方法重定向(我只是发出我想要的代码):
受保护的无效重定向页面(字符串重定向URL)
{
//重定向页面,在这种情况下不应显示任何内容
if(重定向URL.StartsWith(“~”)
重定向URL=ResolveClientUrl(重定向URL);
回答。写(“”);
回答。写(“”);
回答。写(“”);
回答。写(“”);
Response.End();
}
非常感谢您的回复。我正在使用动态路由和动态加载控件,并且在全局asax begin_请求中加载每个控件时,会重复执行,不仅如此,所有页面加载事件都会在控件加载时触发。因此,很难在页面init的开头写出任何内容,所以我通常只在第一行添加对上面函数的调用。控件将已初始化,但这不应该是问题。这可能是一种蛮力方法,但它在安全检查中非常有效。我发现,当我重定向它时,它会重定向并再次开始加载控件。在这段时间内,它会重定向并再次开始加载控件。这就是为什么我在global asax上尝试时,它从未完成的原因,page init load preinit not working..:CI假设当您发现通过http连接的用户时,总是希望重定向到https。在这种情况下,您应该检查用户是否在http上,然后才重定向到https。你什么时候会将用户重定向到https?还有一件事,你应该将其放在页面初始化中,而不是控制初始化中。实际上,你可以在生命周期中的任何地方执行此操作,我通常在OnInit中做我的。我知道你们都想说的。主要问题是我的动态控件加载。因为它,所有事件都会在控件加载时一次又一次地触发。这就是为什么不断地重定向,而不是浏览。我知道你们所有人都想说的。主要问题是我的动态控制加载。因为它,所有事件都在控制加载上一次又一次地触发。这就是为什么不断地进行重定向,而不是浏览。是的,你应该防止这种情况发生,然后你就可以实现重定向。因此,如果你发现你的问题的答案有用,你应该接受答案(见那里有一个勾号),并使用投票。这将帮助你获得更多的问题答案谢谢,我必须阻止它。但是它一次又一次地重复,所以我无法处理此页面,因为该页面没有发回。控制事件r启动该页面上每个控件的页面加载事件..我在这里很困惑
<rule name="Redirect to HTTPS" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther" />
</rule>
protected void RedirectPage(string redirectUrl)
{
// Redirect the page, nothing should be shown in this case
if (redirectUrl.StartsWith("~"))
redirectUrl = ResolveClientUrl(redirectUrl);
Response.Write("<head id=\"pageheader\">");
Response.Write("</head>");
Response.Write("<body onload=\"window.location = '" + redirectUrl + "';\">");
Response.Write("</body>");
Response.End();
}