Daw*_*ski 2 c# asp.net iis asp.net-core .net-6.0
我正在尝试获取 IIS 中托管的 ASP.NET 6 应用程序的名称。我所需要的正是带有正确大小写的名称:
在 .NET Framework 4.8 中,此名称由HttpRequest.ApplicationPath提供,并以正确的大小写返回(如 IIS 中的配置,而不是传入请求的 URL 中的配置)。但是,它在 .NET 6 中不存在。
我试过:
HttpContext.Request.PathBase,但它返回的路径与请求 URL 中的路径完全相同,而不是 IIS 中的路径IServerAddressesFeature和IWebHostEnvironment,但它们都不包含来自 IIS 且大小写正确的名称IServerAddressesFeature,但也没有在这里找到任何相关内容IServerVariablesFeature serverVars = HttpContext.Features.Get<IServerVariablesFeature>()然后是 IIS 站点名称:(请参阅此处的string iis_version = serverVars["INSTANCE_NAME"]文档),但它返回大写字母的应用程序名称()MYSITE.WEB有谁知道如何获取 IIS 中配置的站点名称(使用正确的大小写)?
APPL_MD_PATH服务器变量。
“
APPL_MD_PATH- 检索应用程序的元数据库路径。”
就像这样:
// This code assumes HttpContext is available, such as in a Middleware method or `Controller` subclass.
using Microsoft.AspNetCore.Http;
String? iisMetabasePath = httpContext.GetServerVariable("APPL_MD_PATH");
// or (long-form):
String? iisMetabasePath = HttpContextServerVariableExtensions.GetServerVariable( httpContext, "APPL_MD_PATH" );
Run Code Online (Sandbox Code Playgroud)
然后把这个部分剪掉就可以了/LM/W3SVC/。
请注意,当您在 IIS 外部运行代码时(例如使用 ASP.NET Core 的开发服务器),所有 IIS 特定的数据(例如)"APPL_MD_PATH"将不可用,因此请确保您也处理这种情况。
ApplicationRoot?是时候消灭ILSpy 了……
HttpRequest.ApplicationPath是HttpRuntime.AppDomainAppVirtualPath。HttpRuntime.AppDomainAppVirtualPath是VirtualPath.GetVirtualPathStringNoTrailingSlash(HttpRuntime._theRuntime._appDomainAppVPath)。HttpRuntime._theRuntime._appDomainAppVPath安顿好了HttpRuntime.Init()。HttpRuntime.Init()集_appDomainAppVPath从HttpRuntime.GetAppDomainString(".appVPath")).
AppDomain.System.Web创建一个新的应用程序范围。AppDomainString价值".appVPath"从何而来......System.Web.Hosting.ApplicationManager::PopulateDomainBindings套dict.Add(".appVPath", appVPath.VirtualPathString)
Host。术语太多了。PopulateDomainBindings被称为System.Web.Hosting.ApplicationManager::CreateAppDomainWithHostingEnvironment.
virtualPath: VirtualPath.Create(appHost.GetVirtualPath())。appHost.GetVirtualPath()是IApplicationHost.GetVirtualPath()。
System.Web.Hosting.ISAPIApplicationHost和System.Web.Hosting.SimpleApplicationHost。我们感兴趣的是ISAPIApplicationHost.ISAPIApplicationHost从方法中的运行String appId时参数获取其虚拟路径。
String appPathIAppManagerAppDomainFactory.CreateIAppManagerAppDomainFactory是IIS直接使用的COM接口。
IAppManagerAppDomainFactory但一无所获。
webengine4.dll本机 DLL 处理,我现在没有时间破坏 Ghidra...HttpExtensionProc(及其LPEXTENSION_CONTROL_BLOCK参数)不包含 IIS 应用程序范围AppId或虚拟路径,这让我感到惊讶 - 但最重要的是:这表明该值可能来自GetServerVariable或ServerSupportFunction回调......IWpfApplicationInfoUtil::GetApplicationPropertiesFromAppId方法(这里“WPF”的意思是“ Worker Process Framework ”,与其他UI相关的WPF完全无关)。
IMetadataInfo.GetMetaPath()方法公开的相同数据(该方法返回 形式的字符串"LM/WEBROOT/AppHost/{SiteId}")。IWpfApplicationInfoUtil接口引用呢?
IWorkerProcessFramework->GetWpfInterface(WPF_APPLICATION_INFO_UTIL_ID)->GetApplicationPropertiesFromAppId
IWorkerProcessFramework?
w3wp.exe工作 DLL中。AspNetCoreModuleV2有什么...AspNetCoreModuleV2使用IIS的IHttpApplication,derp。
IHttpApplication暴露GetAppConfigPath()它也返回一个形式的字符串/LM/W3SVC/1/ROOT/{Site Name}。| 归档时间: |
|
| 查看次数: |
2272 次 |
| 最近记录: |