在不使用HttpContext.Current的情况下确定URL主机名?
使用当前请求,我可以获取URL主机名:
HttpContext.Current.Request.Url.Host
但是 – 我需要在不使用当前请求( HttpContext.Current
)的情况下确定URL主机名。 这样做的原因是我的代码是从onChange回调中的SqlDependency
调用的,当时发现了SQL依赖关系。 虽然代码驻留在我的Web应用程序中,但没有请求,并且HttpContext.Current
为null。
我希望我可以从HttpRuntime
获取它,但似乎没有任何用处。 有没有办法可以获得这些信息?
如果您在设置事件处理程序时知道主机,那么您应该能够执行类似的操作(代码未经过实际测试):
string host = HttpContext.Current.Request.Url.Host; var dep = new SqlDependency(cmd); dep.OnChange += ((sender, args) => { DoStuff(host); });
如果您是从Web应用程序运行它,并且它是所有托管代码,那么HttpContext必须存在。 您的子库(假设您的托管代码在库中)是否有对System.Web的引用? 如果没有,请考虑添加此引用。 从那时起,您应该能够使用完全限定的命名空间直接访问HttpContext:
System.Web.HttpContext.Current.Request.Url.Host
在任何情况下,除非您的代码不受管理或您的上下文确实不是源自Web应用程序,否则HttpContext应该在线程处于活动状态时的每个点都可用。
编辑:
基于阅读下面的评论,听起来像SqlDependency是独立发布的。 虽然它在同一个线程上,但它不会被请求直接触发。 由于您要查找的只是主机URL,因此您可以创建应用程序变量或静态变量以在依赖项需要时保存此信息并不是不可思议的。
我也看到的是,虽然HttpContext.Current
可能不可用,但HttpContext.Request
可能是。 这些应该是同一个对象,但它们可能不一定是。 可能会在那里找到主机。
怎么样
Environment.MachineName
您应该使用IIS api查询您正在寻找的网站的信息。 因为根据IIS配置,您的URL或主机名可能不同。 (想想主机头,端口,协议和类似的东西。
有关IIS API的介绍,请访问http://learn.iis.net/page.aspx/165/how-to-use-microsoftwebadministration/
- 查询ASP.NET Core 2和Entity Framework Core 2中表中的附近位置
- 关闭浏览器上的Session_End代码
- 定位的程序集的清单定义与程序集引用不匹配。 (HRESULTexception:0x80131040)
- 在Visual Studio中添加新数据项时,EF 6.x DbContext Generator选项的用途
- 有没有为WebAPI项目生成C#HTTPClient包装器的方法?
- 如何将HttpContext.Current传递给在.net中使用Parallel.Invoke()调用的方法
- .NET Framework 3.5和TLS 1.2
- OLEDB连接到Access数据库(accdb)
- 如何安排C#代码执行