为什么HttpContext.Request.Url与地址栏中的内容不匹配?

时间:2009-07-30 06:24:04

标签: asp.net-mvc http ssl https httpcontext

好的,所以我想强制https / ssl部分我的ASP.NET MVC网站。在这里找到了很多很棒的资源,包括ActionFilter:http://blog.tylergarlick.com/index.php/2009/07/mvc-redirect-to-http-and-https/

每当我启用ActionFilter时,我都会进入重定向循环。问题是,如果我在地址栏中输入 https ://www.mysite.com/,则request.url始终等于 http ://www.mysite .COM /.

动作过滤器的代码如下所示,据我所知,我没有进行任何网址重写,重定向,自定义路由或修改超出标准设置的网址。是否有任何常见/不常见的原因可能发生这种情况和/或任何变通方法或修复方法?该网站目前在NetworkSolutions上托管 - 它是否有可能与IIS配置相关?非常感谢任何帮助。

public class RedirectToHttps : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // Helpers just so I don’t have to type so much
        var request = filterContext.HttpContext.Request;
        var response = filterContext.HttpContext.Response;

        // Make sure we’re in https or local
        if (!request.IsSecureConnection && !request.IsLocal)
        {
            string redirectUrl = request.Url.ToString().Replace("http:", "https:");
            response.Redirect(redirectUrl);
        }

        base.OnActionExecuting(filterContext);
    }
}

1 个答案:

答案 0 :(得分:3)

即使您没有进行任何明确的URL重写,它也是由ASP.NET MVC引擎完成的。 您可以使用HttpContext.Request.RawUrl

检索原始网址