在Application_Start上访问当前域名

发布于 2024-12-08 11:57:20 字数 264 浏览 0 评论 0原文

通常,要访问当前域名,例如站点托管位置,我会执行类似的操作

string rURL = HttpContext.Current.Request.Url.ToString().ToLower();

,但 HttpContext 仅在 Application_BeginRequest 上无法在 Application_Start 上使用。

有什么想法吗?

Normally to access the current domain name e.g where the site is hosted I do something like

string rURL = HttpContext.Current.Request.Url.ToString().ToLower();

But HttpContext is not avaible on Application_Start only from Application_BeginRequest.

Any ideas?

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

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

发布评论

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

评论(4

ゝ杯具 2024-12-15 11:57:21

实现此目的的一种方法是有点作弊并附带警告,那就是使用System.Web.Hosting.HostingEnvironment.SiteName

因此,这看起来像:

string rURL = System.Web.Hosting.HostingEnvironment.SiteName;

现在对于这些注意事项:

  • 这是 IIS 中站点的名称。
  • 这意味着您的站点名称可以是非 URI(例如 My Awesome Site)。
  • 如果您有多个域共享同一个站点,则每个域都是相同的。

就我的目的而言,在服务器上设置日志记录,其中 IIS 中有多个站点指向同一个物理文件夹,上述解决方案可能是最简单的解决方案。我并不是说这一定是“正确”的答案,但它应该被视为替代方案。

One way of achieving this is a little bit of a cheat and comes with caveats, and that's to use System.Web.Hosting.HostingEnvironment.SiteName.

So this would look like:

string rURL = System.Web.Hosting.HostingEnvironment.SiteName;

And now for those caveats:

  • This is the name of the site in IIS.
  • That means your site name can be a non-URI (eg My Awesome Site).
  • If you have multiple domains sharing the same site, it'll be the same for each one.

For my purposes - setting up logging on servers where I had multiple sites in IIS pointing to the same physical folder - the above solution was probably the simplest and easiest. I'm not saying it's necessarily the 'right' answer, but it should be considered as an alternative.

南城旧梦 2024-12-15 11:57:20

单个 IIS 应用程序可以绑定到许多不同的 URL。 Application_Start 在收到任何请求之前触发,因此查找站点绑定的域名的唯一方法是查询 IIS。

即使如此,您也可能无法得到答案 - 考虑应用程序绑定到通配符/默认主机名的情况。

更好的方法可能是查看 Application_AuthenticateRequest。它在 Application_BeginRequest 之前触发,并为您提供完整的 HttpContext.Current.Request 对象。

A single IIS application can be bound to many different URLs. Application_Start fires before any request has been received, so the only way to find the domain name to which the site is bound is to query IIS.

Even then you may not be able to get an answer - consider the situation where an application is bound to a wildcard / default hostname.

A better approach may be to look at Application_AuthenticateRequest. This fires before Application_BeginRequest and does give you a full HttpContext.Current.Request object.

提赋 2024-12-15 11:57:20

尝试 Dns .GetHostName()

您可以在 Gloabl.asax.cs 中使用它,无论是否在 Application_Start() 中。

var hostName = Dns.GetHostName();

在 Asp.net 4.5 MVC 中测试。

Try Dns.GetHostName().

You can use this in Gloabl.asax.cs, no matter within Application_Start() or not.

var hostName = Dns.GetHostName();

tested in Asp.net 4.5 MVC.

没有你我更好 2024-12-15 11:57:20

IIS 应用程序不知道在应用程序启动时从哪个域访问(请参阅绑定)。

The IIS application does not know what domain its accessed from (see bindings) at application start.

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