全局 ASAX - 获取服务器名称

问题描述 投票:0回答:7

谁能告诉我是否有办法在 global.asax 的 Application_Start 事件中获取我网站的域名?

通常我只是从 Context.Request.ServerVariables["SERVER_NAME"] 获取它,但这不可用。理想情况下,我还想从启动应用程序的请求中获取 URL。


嗯 - 从下面的答案来看,使用 IIS7 似乎会有所不同。这是新的,现在有设计指南来尝试阻止您这样做:

IIS 博客

asp.net .net asp.net-mvc iis-7
7个回答
25
投票

您可以通过静态 HttpContext.Current 成员访问 Context

HttpContext.Current.Request.ServerVariables["SERVER_NAME"];
HttpContext.Current.Request.Url;

编辑,根据您的一些评论,我做了一些额外的研究

此错误是由于 IIS7 集成管道中的设计更改导致请求上下文在 Application_Start 事件中不可用。当使用经典模式(在早期版本的 IIS 上运行时的唯一模式)时,请求上下文过去是可用的,即使 Application_Start 事件始终被设计为应用程序生命周期中的全局且与请求无关的事件。尽管如此,由于 ASP.NET 应用程序始终由对应用程序的第一个请求启动,因此过去可以通过静态 HttpContext.Current 字段获取请求上下文。

所以你有两个选择

  1. 更改应用程序代码以不使用请求上下文(推荐)。
  2. 将应用程序移至经典模式(不推荐)。

http://mvolo.com/iis7-integrated-mode-request-is-not-available-in-this-context-exception-in-applicationstart/


18
投票

您的网络应用程序可以在多个不同的域下运行。由于

Application_Start
事件中没有当前请求,因此您无法知道应用程序将在哪个域下被调用。

但是,您可以使用

System.Environment.MachineName
找到机器名称。


5
投票

我猜您使用的是 IIS 7?因为 HttpContext 在 IIS 6.0 上可用。

您可以考虑稍后填写该信息吗?例如,第一次调用

Application_BeginRequest


4
投票

在 VB.NET 中,在 Global.asax 中,我使用以下内容:

Hosting.HostingEnvironment.ApplicationHost.GetSiteName

对应IIS中的应用程序名称。

更新: 似乎方法“GetSiteName”不打算直接调用,并且它在 Visual Studio 2015 中不再对我有用(或者可能是因为我所做的框架版本更改)。我通过将其替换为来修复它:

System.Web.Hosting.HostingEnvironment.SiteName

0
投票

您是否有权访问 Request 对象?如果是这样我想你可以使用 请求.Url.权限

它将返回您正在寻找的 dns 主机名。

G


0
投票

void ISessionIDManager.SaveSessionID(HttpContext上下文,字符串id,out bool重定向,out bool cookieAdded) { base.SaveSessionID(上下文,id,输出重定向,输出cookieAdded);

        if (cookieAdded)
        {
            SessionStateSection sessionStateSection = (System.Web.Configuration.SessionStateSection)ConfigurationManager.GetSection("system.web/sessionState");
            var cookie = context.Response.Cookies[sessionStateSection.CookieName];
            cookie.Path = context.Request.ApplicationPath;
        }
    }

我创建这个类并添加到 web.config 标签下面 另外,之后该路径不再显示,而是使用 ASP.NET


-3
投票

你尝试过吗:-

System.Web.HttpContext.Current.Request.ServerVariables["SERVER_NAME"]

谢谢,

菲尔。

© www.soinside.com 2019 - 2024. All rights reserved.