Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET服务器对象在C#类中不可见_C#_Asp.net - Fatal编程技术网

ASP.NET服务器对象在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本身会给

我有一个ASP.NET WEB应用程序,并向该应用程序添加了一个类

我们称之为a.C

在本课程中,我们有:

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