在我的库中,我使用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
}
答案 0 :(得分:11)
更标准的方法是使用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 :(得分:3)
在这里阅读msdn文档: http://msdn.microsoft.com/en-us/library/system.web.hosting.hostingenvironment.applicationid(v=vs.100).aspx
它声明:
“应用程序必须在AspNetHostingPermissionLevel设置下运行 高度信任以访问ApplicationId属性“
我希望你能得到答案。