Почему HttpContext.Request.Url не соответствует тому, что находится в адресной строке? - PullRequest
1 голос
/ 30 июля 2009

Хорошо, поэтому я хочу принудительно установить 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 /.

Код для фильтра действий приведен ниже, и, насколько мне известно, я не делаю переписывания, перенаправления, пользовательской маршрутизации или изменения URL-адреса за пределы стандартной настройки. Существуют ли общие / необычные причины, по которым это может происходить, и / или какие-либо обходные пути или исправления? В настоящее время сайт размещен в 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 Ответ

3 голосов
/ 30 июля 2009

Даже если вы не делаете явной перезаписи URL-адреса, она выполняется механизмом ASP.NET MVC. Вы, вероятно, можете получить исходный URL с помощью HttpContext.Request.RawUrl

...