Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ASP.NET页面生命周期中从HTTP重定向到HTTPS?_Asp.net_Http_Iis 7_Ssl_Https - Fatal编程技术网

如何在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重写来执行此操作。规则

我有一个ASP.NET页面,添加了很多服务器控件。当用户从HTTP访问页面时,我需要将请求重定向为使用HTTPS。控件在
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();
}