所以在我的代码中,我想检测我的登录页面是否被称为http,并将其重定向到https.

我知道有一些非代码的方法来剥皮,但是出于令人沮丧的技术原因,我不得不用代码来做这件事.

            if (!Request.IsSecureConnection)
            {
                string redirectUrl = Request.Url.ToString().Replace("http:", "https:");
                Response.Redirect(redirectUrl);
            }

所以我把这个放在我的Page_Load(...)中,确保我的调试器使用真正的IIS,而不是VS2008s IIS,然后点击调试.

在调试器中,跳华尔兹,点击

Get"Internet Explorer无法显示网页,url是HTTP,而不是HTTPS.

那我错过了什么?这看起来不像是火箭科学,我在很多博客上都看到过类似的代码……

我做错了什么?我想这肯定是新秀犯下的一个非常明显的错误,但我没有看到这一点.

推荐答案

为了确保我没有调试,我也会打!Request.IsLocal分,不过如果你使用的是一个真实的IIS实例,并且在调试时应用了证书,那么这不应该是一个问题.

if (!Request.IsLocal && !Request.IsSecureConnection)
{
    string redirectUrl = Request.Url.ToString().Replace("http:", "https:");
    Response.Redirect(redirectUrl, false);
    HttpContext.ApplicationInstance.CompleteRequest();
}

注意:这个答案假设控制器中有一个MVC上下文,其中HttpContext是保存当前上下文的属性.如果你运气不好,仍然在使用WebForms,或者正在以退化的方式引用上下文,那么你需要使用HttpContext.Current.ApplicationInstance.CompleteRequest().

注意:我已经将其更新为与建议的模式一致,以根据framework documentation终止请求.

在页面处理程序中使用此方法终止请求时

Asp.net相关问答推荐

调用context.Users和context.Set User有什么区别?

ASP.NET - 在屏幕底部显示应用程序构建日期/信息

asp.net 单选按钮分组

如何将 viewbag 显示为 html?

威胁已经被清除了

获取没有主机的 url 部分

使用 Owin 身份验证的服务器端声明缓存

IIS 将旧用户名返回到我的应用程序

用于 ASP.NET 的 System.Drawing 的替代品?

区分开发、登台和生产环境之间的 web.config

您对 Windows Workflow Foundation 有何体验?

IIS 中的 existingResponse="PassThrough" 是什么意思?

ASP.NET vNext 与主机无关,这意味着什么?

在 JavaScript 中获取当前会话值?

如何将参数传递给 ASP.NET MVC 2 中的自定义 ActionFilter?

HttpContext.Current.Request.Url.Host 它返回什么?

调查 Web.Config 重复部分原因的步骤

ASP.Net 无法创建/卷影复制

ASP.Net 错误:应用程序池的标识无效

DateTime.Parse 和 Convert.ToDateTime 之间有什么区别?