在我的库中,我将 HostingEnvironment.MapPath 用于我的 Web 应用程序。但我需要从 Windows 窗体和 Windows 服务调用相同的函数。
在 Windows 应用程序中 HostingEnvironment.ApplicationID 为空,在 Web 应用程序中 HostingEnvironment.ApplicationID 类似于“99xxx999”。
我可以使用“HostingEnvironment”来确定它是 Web 还是 Win?
用这个安全吗?
if (HostingEnvironment.ApplicationID == null)
{
//called from windows application
}
else
{
//called from web application
}
最佳答案
执行此操作的更标准方法是使用 HttpContext.Current 方法:
if (HttpContext.Current == null)
{
// called from windows application
}
else
{
// called from web application
}
当然,在应用程序的非 HTTP 相关层中使用 HttpContext 相关的东西是一种设计味道。它不仅闻起来 => 还很臭。
一个更标准的方法是让你的代码直接作为参数传递文件名作为参数。当从 Web 应用程序中调用时,您将传递 Server.MapPath("~/foo.txt")
,当您从 Windows 应用程序中调用它时,您将直接传递相对于当前文件的文件名可执行文件。
这样您的代码就不需要依赖任何 HTTP 特定的东西,并且可以在任何平台上愉快地重用。调用者有责任将您的代码需要处理的文件名传递给它。确定此文件名的方式是特定于平台的。不是您的代码责任。不要混淆职责。
关于c# - 我可以用 "HostingEnvironment"来判断是Web还是Win,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9872259/