gpt4 book ai didi

C# IIS 7 基本 URL

转载 作者:行者123 更新时间:2023-11-30 20:58:41 25 4
gpt4 key购买 nike

最近我问这个:

Get Base URL of My Web Application

这在一定程度上适用于调试,因为我使用的是 VS 开发服务器。

然后我生成了一个安装,然后安装将指向 IIS 7。

我有:

    void Application_Start(object sender, EventArgs e)
{
_baseUrl = HttpContext.Current.Request.Url.ToString();
....
}

但这引发了以下错误:

请求在此上下文中不可用

然后我做了一些阅读,这就是为什么会发生这种情况:

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

然后我使用上述技术将代码从 Application_Start 移出到 Application_BeginRequest,因为我发现 Application_BeginRequest 被执行了多次。

但问题是我需要 IIS 7 的基本 URL,以便在 Application_Start 中使用,所以我有一个我试图设置的全局字符串:

FirstRequestInitialization.Initialize(context);

但尝试这样做并不奇怪:

Application["BaseUrl"] = HttpContext.Current.Request.Url.ToString();

我得到这个错误:“Microsoft.Web.Administration.Application”是一种“类型”,但像“变量”一样使用

我只想要 IIS 7 的基本 URL。

我不能使用目录条目,因为我不支持 IIS 6。

我该怎么做?有什么解决方法吗?我可以从 VS 执行 AppCmd 吗?

非常感谢任何帮助。谢谢!

最佳答案

简短的回答:你无法得到它,因为网站没有单一的规范基础 URI - 网站(或者更确切地说,网络应用程序)可以配置为响应任何绑定(bind)、任何域名的请求,和任何资源路径 - 并且网站可以在主机网络服务器 (IIS) 中重新配置,而应用程序根本不会意识到这一点。

如果你真的想存储你的“基本 URL”(即使这样的东西并不真正存在)那么你可以在 Application_BeginRequest 中这样做:

private static readonly Object _arbitraryUrlLock = new Object();
private static volatile String _arbitraryUrl;

public void Application_BeginRequest() {
if( _arbitraryUrl == null )
lock( _arbitraryUrlLock )
if( _arbitraryUrl == null )
_arbitraryUrl = HttpContext.Current.Request.Url.ToString();
}

关于C# IIS 7 基本 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15942641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com