ASP.NET服务器对象在C#类中不可见
我有一个ASP.NET WEB应用程序,并向该应用程序添加了一个类 我们称之为a.C 在本课程中,我们有:ASP.NET服务器对象在C#类中不可见,c#,asp.net,C#,Asp.net,我有一个ASP.NET WEB应用程序,并向该应用程序添加了一个类 我们称之为a.C 在本课程中,我们有: using System.Web; 仍然适用于以下行: Server.MapPath("~\\bin\\error.txt") 我得到“名称服务器在当前上下文中不存在” 我进一步研究了服务器对象,但我的目标是: HttpServerUtility Class 它似乎具有Server类的所有接口 问题:这些是相同的HttpServerUtility和服务器吗 为什么Server本身会给
using System.Web;
仍然适用于以下行:
Server.MapPath("~\\bin\\error.txt")
我得到“名称服务器在当前上下文中不存在”
我进一步研究了服务器对象,但我的目标是:
HttpServerUtility Class
它似乎具有Server类的所有接口
问题:这些是相同的HttpServerUtility
和服务器吗
为什么Server
本身会给我提到的错误
HttpServerUtility
类可在a.cs中访问
=======================
在我的情况下,建议的重复解决方案不是解决方案:可接受的答案是:
您需要对System.Web程序集的引用
您需要获得正确的类名(HttpServerUtility,而不是HttpServerUtuility)
您需要获得正确的方法名称(UrlDecode,而不是UrlDecode)
您需要类的实例,因为它是实例方法
上述内容均不适用于我的情况。
Server
属于的类型HttpServerUtility
是的属性,由ASP.NET设置为请求生命周期的一部分。要在独立类中获取HttpServerUtility
的实例,可以使用HttpContext.Current.Server
。像这样:
var server = HttpContext.Current.Server;
或者在类的函数中,接受上下文参数
public static void DoStuff(HttpContext context)
{
var server = context.Server;
}
Server
的类型为HttpServerUtility
是的属性,由ASP.NET设置为请求生命周期的一部分。要在独立类中获取HttpServerUtility
的实例,可以使用HttpContext.Current.Server
。像这样:
var server = HttpContext.Current.Server;
或者在类的函数中,接受上下文参数
public static void DoStuff(HttpContext context)
{
var server = context.Server;
}
因为
Server
是页面的属性。但是看起来您没有在a.cs
中继承page类,因此它不可用。您还可以使用HttpContext.Current.Server
Server
属性是的实例,有两个静态方法和许多实例方法,因此根据需要,您也可以使用静态方法。因为Server
是页面的属性。但是看起来您没有在a.cs
中继承page类,因此它不可用。您还可以使用HttpContext.Current.Server
Server
属性是的实例,有两个静态方法和许多实例方法,因此根据需要,您也可以使用静态方法。这是因为类中不存在Server
。它确实作为属性存在于页面
类中。因此,当您在页面的代码隐藏中访问服务器时,您访问的是一个属性,而不是类本身
也可以在此处访问该属性:
System.Web.HttpContext.Current.Server
Current
是HttpContext
类上的静态属性,该类引用当前HTTP上下文,该上下文由ASP.NET在运行的web应用程序中初始化。请注意,如果您这样做,您的类将与正在运行的HTTP上下文紧密耦合。这通常不是一个好的做法
相反,您可能需要在类中使用有效的HttpContext
实例。大概是这样的:
public class MyClass
{
private HttpContext _currentContext;
public MyClass(HttpContext currentContext)
{
_currentContext = currentContext;
}
// the rest of your class
}
然后,每当需要创建类的实例时,它还需要提供类将使用的HttpContext
。这允许您的类独立于任何给定的HTTP上下文进行测试,只要使用它的任何东西都可以提供一个测试
如果类不需要整个上下文,而只需要其中的一些组件或值,则可以进一步解耦。一般来说,对象耦合越少,它们的可移植性和可重用性就越强。这是因为类中不存在
Server
。它确实作为属性存在于页面
类中。因此,当您在页面的代码隐藏中访问服务器时,您访问的是一个属性,而不是类本身
也可以在此处访问该属性:
System.Web.HttpContext.Current.Server
Current
是HttpContext
类上的静态属性,该类引用当前HTTP上下文,该上下文由ASP.NET在运行的web应用程序中初始化。请注意,如果您这样做,您的类将与正在运行的HTTP上下文紧密耦合。这通常不是一个好的做法
相反,您可能需要在类中使用有效的HttpContext
实例。大概是这样的:
public class MyClass
{
private HttpContext _currentContext;
public MyClass(HttpContext currentContext)
{
_currentContext = currentContext;
}
// the rest of your class
}
然后,每当需要创建类的实例时,它还需要提供类将使用的HttpContext
。这允许您的类独立于任何给定的HTTP上下文进行测试,只要使用它的任何东西都可以提供一个测试
如果类不需要整个上下文,而只需要其中的一些组件或值,则可以进一步解耦。一般来说,,对象的耦合越少,它们的可移植性和可重用性就越高。查看Microsoft帮助的可能重复:
https://msdn.microsoft.com/en-us/library/system.web.httpserverutility%28v=vs.110%29.aspx
我不认为服务器是HttpServerUtility@Nash我没说是的。重读我的答案。我说过该属性的类型是HttpServerUtility。所以我可以将var服务器作为上下文参数传递给DoStuff函数?@SNash No。您可以使用一种方法,也可以使用另一种方法。获取上下文(以及服务器)从页面通过函数或构造函数参数或使用HttpContext.Current.Server
。查看Microsoft帮助:https://msdn.microsoft.com/en-us/library/system.web.httpserverutility%28v=vs.110%29.aspx
我不认为服务器是HttpServerUtility@Nash我没说是的。重读我的答案。我说的财产类型是HttpSe