我可以使用"HostingEnvironment"来确定它是Web还是Win

ady*_*suf 4 c# asp.net asp.net-mvc winforms

在我的库中,我使用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
}
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 11

一个更标准的方法来使用它来使用HttpContext.Current方法:

if (HttpContext.Current == null)
{
    // called from windows application
}
else
{
    // called from web application
}
Run Code Online (Sandbox Code Playgroud)

当然,在应用程序的非HTTP相关层中使用HttpContext相关的东西是一种设计气味.它不仅闻起来很臭,还有臭味.

更标准的方法是将代码作为参数直接传递给文件名作为参数.从Web应用程序中Server.MapPath("~/foo.txt")调用时,您将通过,当您从Windows应用程序中调用它时,您将直接传递相对于当前可执行文件的文件名.

这样,您的代码不需要依赖任何HTTP特定的东西,并且可以在任何平台中愉快地重用.调用者有责任将代码需要处理的文件名传递给它.确定此文件名的方式是特定于平台的.不是你的代码责任.不要混淆责任.