c# - 我可以用 "HostingEnvironment"来判断是Web还是Win

标签 c# asp.net asp.net-mvc winforms

在我的库中,我将 HostingEnvironment.MapPath 用于我的 Web 应用程序。但我需要从 Windows 窗体和 Windows 服务调用相同的函数。

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

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

用这个安全吗?

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

最佳答案

执行此操作的更标准方法是使用 HttpContext.Current 方法:

if (HttpContext.Current == null)
{
    // called from windows application
}
else
{
    // called from web application
}

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

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

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

关于c# - 我可以用 "HostingEnvironment"来判断是Web还是Win,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9872259/

相关文章:

c# - 无法从 TFS 获取 VersionControlServer 服务

javascript - 在 JavaScript 上请求客户端证书

c# - 帮助 C#.NET 通用集合性能和优化

asp.net - 通过 google 应用程序使用 smtp 中继发送邮件

asp.net - System.web.ui.page 的替代品

javascript - 想要在 javascript 文件中混合服务器端 ASP.Net MVC 扩展,但是如何... RenderPartial?

c# - 说明如何使用 FirstDisplayedScrollingRowIndex

asp.net - Facebook Connect 和 ASP.NET

asp.net - 如何从 Web.config (ASP.NET) 中的规则中排除目录

javascript - 初始加载和更新之间的 SignalR