Проблема с использованием контекста в файле global.asax - PullRequest
2 голосов
/ 30 июля 2011

У меня есть пользователь global.asax, и я должен написать этот код в своем приложении ASP.NET:

    <%@ Application CodeBehind="Global.asax.cs" Language="C#" %>

<script RunAt="server">
    public void Application_Start()
    {
        string str = Context.Request.Url.AbsoluteUri.Replace("http", "https");
        Context.RewritePath(str);
    }
</script>

но это дает мне это:

"Request is not available in this context"

Ответы [ 2 ]

4 голосов
/ 30 июля 2011

От http до https вам нужно сделать редирект.

Основная причина, по которой RewritePath не работает, заключается в том, что http и https работают на разных портах. Кроме того, приложение Start не место, чтобы позвонить этому думает. BeginRequest является единственным.

Поэтому, если вы хотите автоматически изменить все запросы на https, используйте этот код.

protected void Application_BeginRequest(Object sender, EventArgs e)
{
    HttpApplication app = (HttpApplication)sender;
    string cTheFile = HttpContext.Current.Request.Path;
    string sExtentionOfThisFile = System.IO.Path.GetExtension(cTheFile);
    if (sExtentionOfThisFile.Equals(".aspx", StringComparison.InvariantCultureIgnoreCase))
    {
        if (!app.Context.Request.IsSecureConnection)
        {
            Response.Redirect(app.Context.Request.RawUrl.Replace("http://", "https://"), true);
            return;
        }
    }

    // rest of your code here and below
}

Вы также можете использовать этот модуль для автоматического переключения.

1 голос
/ 30 июля 2011

Запрос недоступен в Application_Start, это слишком рано.
Вы захотите переписать путь в Application_BeginRequest, см. http://msdn.microsoft.com/en-us/library/sa5wkk6d.aspx для примера.

...