在global.asax文件中使用上下文时出现问题

时间:2011-07-30 07:24:53

标签: asp.net global-asax

我有用户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 个答案:

答案 0 :(得分:4)

从http到https,您需要进行重定向。

RewritePath无法正常工作的主要原因是http和https在不同的端口上工作。此外,应用程序启动不是这个调用的地方。 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
}

您也可以使用此 module to make this switching automatically.

答案 1 :(得分:1)

请求在Application_Start中不可用,现在为时尚早 您需要在Application_BeginRequest中重写路径,有关示例,请参阅http://msdn.microsoft.com/en-us/library/sa5wkk6d.aspx