我试过了

Uri uri = HttpContext.Current.Request.Url;
String host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;

它在我的本地机器上运行得很好,但是当发布到IIS7时,有一个例外

System.Web.HttpException: Request is not available in this context

有人知道怎么做到这一点吗?

推荐答案

当您的Web应用程序启动时,不会处理任何HTTP请求.

您可能需要处理并定义请求上下文可用的应用程序_BeginRequest(Object Sender,EventArgs e)方法.

Edit:以下是一个代码示例,其灵感来源于迈克尔·希明斯链接的迈克·沃洛达斯基的博客:

    void Application_BeginRequest(Object source, EventArgs e)
    {
        HttpApplication app = (HttpApplication)source;
        var host = FirstRequestInitialisation.Initialise(app.Context);
    }

    static class FirstRequestInitialisation
    {
        private static string host = null;
        private static Object s_lock = new Object();

        // Initialise only on the first request
        public static string Initialise(HttpContext context)
        {
            if (string.IsNullOrEmpty(host))
            {
                lock (s_lock)
                {
                    if (string.IsNullOrEmpty(host))
                    {
                        var uri = context.Request.Url;
                        host = uri.GetLeftPart(UriPartial.Authority);
                    }
                }
            }

            return host;
        }
    }

Asp.net相关问答推荐

为什么 @Html.EditorFor 和 @Html.PasswordFor 在 MVC 中创建不同的样式框?

如何在 IIS 上配置 Web Deploy 发布功能,以便开发人员可以发布?

Web API Queryable - 如何应用 AutoMapper?

如何使用 SmtpClient.SendAsync 发送带有附件的邮箱?

WebAPI 请求流支持

将命令行参数传递给 ASP.NET Core 中的 Startup 类

如何使用 json 将复杂类型传递给 ASP.NET MVC 控制器

使用 JavaScript 更改 ASP.NET 标签的可见性

如何从 web.config 中读取系统值并在 ASP.NET MVC C# 方法中使用

IIS 中的 existingResponse="PassThrough" 是什么意思?

使用 Asp.Net MVC 和 Web Api 配置 Ninject

如何在 ASP.NET 站点中添加 favicon.ico

如何在 ASP.Net 的客户端 (JavaScript) 上判断 Page.Validate()?

如何在 ASP.NET 中获取原始请求正文?

WebForm_PostBackOptions 文档

SQLServer 与 StateServer 的 ASP.NET 会话状态性能

如何防止aspxerrorpath作为查询字符串传递给 ASP.NET 自定义错误页面

为什么 HttpWebRequest 会抛出异常而不是返回 HttpStatusCode.NotFound?

配置授权服务器端点

您的下一个 ASP.NET 项目的 Select 是什么:Web 窗体还是 MVC?