我可以使用“HostingEnvironment”来确定它是Web还是Win吗?

5

在我的库中,我使用HostingEnvironment.MapPath来处理我的Web应用程序。但是我需要从Windows表单和Windows服务中调用相同的函数。

在Windows应用程序中,HostingEnvironment.ApplicationID为null,在Web应用程序中,HostingEnvironment.ApplicationID类似于“99xxx999”。

我可以使用“HostingEnvironment”来确定是Web还是Win吗?

使用这个安全吗?

if (HostingEnvironment.ApplicationID == null)
{
    //called from windows application
}
else
{
    //called from web application
}
2个回答

12

更标准的方法是使用HttpContext.Current方法:

if (HttpContext.Current == null)
{
    // called from windows application
}
else
{
    // called from web application
}
当然,在应用程序的非HTTP相关层中使用HttpContext相关内容是一种设计上的问题。这不仅有异味 => 它臭极了。
更标准的方法是将文件名作为参数直接传递给代码。当从Web应用程序中调用时,你会传递Server.MapPath(“~/foo.txt”),而当从Windows应用程序中调用时,则直接传递相对于当前可执行文件的文件名。
这样,你的代码就不需要依赖于任何HTTP特定的东西,并且可以在任何平台上快乐地重复使用。调用者有责任传递代码需要处理的文件名。确定文件名的方式是平台特定的。不是你的代码的责任。不要混淆责任。

指出“更标准的方法”值得加1分。感谢您指出显而易见的事情(在我的情况下,这应该是显而易见的,但直到我在这里读到它才明白)。 - Bob.at.Indigo.Health

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接