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

时间:2012-03-26 12:37:39

标签: 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
}

2 个答案:

答案 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属性“

我希望你能得到答案。