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特定的东西,并且可以在任何平台中愉快地重用.调用者有责任将代码需要处理的文件名传递给它.确定此文件名的方式是特定于平台的.不是你的代码责任.不要混淆责任.