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

发布于 2024-11-27 05:38:41 字数 441 浏览 1 评论 0原文

我有用户 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"

I have user global.asax and I have write this code in my ASP.NET application :

    <%@ 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>

but it gives me this :

"Request is not available in this context"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

迟到的我 2024-12-04 05:38:41

从 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
}

您还可以使用此模块自动进行此切换。

From http to https you need to make redirect.

The main reason the RewritePath is not working is because the http and https work on different ports. Also the Application Start is not the place to call this thinks. The BeginRequest is the one.

So if you like to change all the request automatically to https, use this code.

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
}

You can also use this module to make this switching automatically.

如梦亦如幻 2024-12-04 05:38:41

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

Request is not available in Application_Start, it's too early.
You'll want to rewrite the path in Application_BeginRequest, see http://msdn.microsoft.com/en-us/library/sa5wkk6d.aspx for an example.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文