在我的库中,我将 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/

10-09 13:39