当前位置:编程学习 > C#/ASP.NET >>

c# 在*.aspx.cs中为什么可以直接以request. ***写

request是page的一个属性。我看这个属性也不是static型的。
为什么不用给page实例化,在  实例化对象.request。。
而是可以直接request。。。
这是为什么
比如可以直接这样:
protected void Button2_Click(object sender, EventArgs e)
        {
            int i;
            string[] arr = Request.AcceptTypes;
        } --------------------编程问答-------------------- 因为你的页面已经继承System.Web.UI.Page

Request是Page的实例属性,已经被包装好,包装的是Context.httpRequest(手写,可能有误)是静态的对象

所有可以直接使用 --------------------编程问答-------------------- ls xiashuo
一个非静态的成员函数,如果不被一个已经实例化的对象调用,会引发nullexception
例如
class a{
  public void foo(){};
}
a a1;
a1.foo(); 
page 已经实例化了,否则无法调用,只是实例化是由asp.net 框架负责,你看不到罢了 --------------------编程问答-------------------- 摘自MSDN


Request 属性提供对 HttpRequest 类的属性和方法的编程访问。由于 ASP.NET 页包含对 System.Web 命名空间(含有 HttpContext 类)的默认引用,因此在 .aspx 页上可以引用 HttpContext 的成员,而不需要对 HttpContext 的完全限定类引用。例如,可只使用 Request.Browser 获取客户端浏览器的功能。但是,如果要从 ASP.NET 代码隐藏模块中使用 HttpRequest 的成员,则必须在该模块中包括对 System.Web 命名空间的引用,同时还要完全限定对当前活动的请求/响应上下文以及要使用的 System.Web 中的类的引用。例如,在代码隐藏页中,必须指定全名 HttpContext.Current.Request.Browser。
--------------------编程问答--------------------
[BrowsableAttribute(false)]
public HttpRequest Request { get; }

httprequest中有个属性
public string[] AcceptTypes { get; }


request是page的一个属性。我看这个属性也不是static型的。
为什么不用给page实例化,
你的页面是继承page的,request是page的一个属性,所以你在你的页面中可以直接访问这个request属性。 --------------------编程问答--------------------
引用 2 楼  的回复:
ls xiashuo
一个非静态的成员函数,如果不被一个已经实例化的对象调用,会引发nullexception
例如
class a{
  public void foo(){};
}
a a1;
a1.foo(); 
page 已经实例化了,否则无法调用,只是实例化是由asp.net 框架负责,你看不到罢了





[BrowsableAttribute(false)]
public HttpRequest Request { get; }

当然不是静态的,包装过了

public HttpRequest Request { get{
//do some thing
return Context.HttpRequest;
}}


Page本身就是为了asp.net webform的模型 而准备的,你完全可以不用 这个模型

如果你用http handler 或者mvc,你如何获取请求对象

Context.HttpRequest



它的实例化关系,可以搜索 handlerFactory

相当于

Page test=new 你的页面();


请问哪里xiashuo? --------------------编程问答-------------------- 包装的是Context.httpRequest(手写,可能有误)是静态的对象

所有可以直接使用 --------------------编程问答-------------------- 照你的说法
静态对象就可以直接使用了???
例如
public class A{
public static somerefclass a;

}
对于 那个 a, 在任何时候都可用啦?不用初始化啦??


--------------------编程问答-------------------- 看5楼啊


public HttpRequest Request { get{
//do some thing
return Context.HttpRequest;
}}


下个问题是不是 Context.HttpRequest没有初始化?



它不是page初始化的,它只是一个使用者









--------------------编程问答-------------------- 谁告诉你他是静态对象,如果是静态对象的话,说有asp.net 用户将会共享一个对象。。。。
--------------------编程问答-------------------- 多谢,认错了

是共享对象,不是静态对象


说是静态对象有错误
--------------------编程问答--------------------
    // 摘要:
    //     封装有关个别 HTTP 请求的所有 HTTP 特定的信息。
    public sealed class HttpContext : IServiceProvider
    {
        // 摘要:
        //     使用指定的辅助请求对象初始化 System.Web.HttpContext 类的新实例。
        //
        // 参数:
        //   wr:
        //     当前 HTTP 请求的 System.Web.HttpWorkerRequest 对象。
        public HttpContext(HttpWorkerRequest wr);
        //
        // 摘要:
        //     使用指定的请求和响应对象初始化 System.Web.HttpContext 类的新实例。
        //
        // 参数:
        //   request:
        //     当前 HTTP 请求的 System.Web.HttpRequest 对象。
        //
        //   response:
        //     当前 HTTP 请求的 System.Web.HttpResponse 对象。
        public HttpContext(HttpRequest request, HttpResponse response);

        // 摘要:
        //     获取在处理 HTTP 请求的过程中累积的错误数组。
        //
        // 返回结果:
        //     当前 HTTP 请求的 System.Exception 对象数组。
        public Exception[] AllErrors { get; }
        //
        // 摘要:
        //     获取当前 HTTP 请求的 System.Web.HttpApplicationState 对象。
        //
        // 返回结果:
        //     当前 HTTP 请求的 System.Web.HttpApplicationState。若要获取当前 HTTP 请求的 System.Web.HttpApplication
        //     对象,请使用 System.Web.HttpContext.ApplicationInstance。(ASP.NET 使用 ApplicationInstance
        //     代替 Application 作为属性名来指代当前的 System.Web.HttpApplication 实例,以避免 ASP.NET 与经典
        //     ASP 之间产生混淆。在经典 ASP 中,Application 指代全局应用程序状态字典。)
        public HttpApplicationState Application { get; }
        //
        // 摘要:
        //     获取或设置当前 HTTP 请求的 System.Web.HttpApplication 对象。
        //
        // 返回结果:
        //     当前 HTTP 请求的 System.Web.HttpApplication。ASP.NET 使用 ApplicationInstance 代替
        //     Application 作为属性名来指代当前的 System.Web.HttpApplication 实例,以避免 ASP.NET 与经典 ASP
        //     之间产生混淆。在经典 ASP 中,Application 指代全局应用程序状态字典。
        //
        // 异常:
        //   System.InvalidOperationException:
        //     Web 应用程序正在 IIS 7.0 集成模式下运行,并且已尝试将属性值从非 NULL 值更改为 null。
        public HttpApplication ApplicationInstance { get; set; }
        //
        // 摘要:
        //     获取当前应用程序域的 System.Web.Caching.Cache 对象。
        //
        // 返回结果:
        //     当前应用程序域的 System.Web.Caching.Cache。
        public System.Web.Caching.Cache Cache { get; }
        //
        // 摘要:
        //     为当前 HTTP 请求获取或设置 System.Web.HttpContext 对象。
        //
        // 返回结果:
        //     当前 HTTP 请求的 System.Web.HttpContext。
        public static HttpContext Current { get; set; }
--------------------编程问答--------------------
   // 摘要:
        //     获取当前 HTTP 请求的 System.Web.HttpRequest 对象。
        //
        // 返回结果:
        //     当前 HTTP 请求的 System.Web.HttpRequest。
        //
        // 异常:
        //   System.Web.HttpException:
        //     Web 应用程序正在 IIS 7 集成模式下运行。
        public HttpRequest Request { get; }
        //
        // 摘要:
        //     获取当前 HTTP 响应的 System.Web.HttpResponse 对象。
        //
        // 返回结果:
        //     当前 HTTP 响应的 System.Web.HttpResponse。
        //
        // 异常:
        //   System.Web.HttpException:
        //     Web 应用程序正在 IIS 7 的“集成”模式下运行。
        public HttpResponse Response { get; }
        //
        // 摘要:
        //     获取提供用于处理 Web 请求的方法的 System.Web.HttpServerUtility 对象。
        //
        // 返回结果:
        //     当前 HTTP 请求的 System.Web.HttpServerUtility。
        public HttpServerUtility Server { get; }
        //
        // 摘要:
        //     为当前 HTTP 请求获取 System.Web.SessionState.HttpSessionState 对象。
        //
        // 返回结果:
        //     当前 HTTP 请求的 System.Web.SessionState.HttpSessionState 对象。
        public HttpSessionState Session { get; }
        //
        // 摘要:
        //     获取或设置一个值,该值指定 System.Web.Security.UrlAuthorizationModule 对象是否应跳过对当前请求的授权检查。
        //
        // 返回结果:
        //     如果 System.Web.Security.UrlAuthorizationModule 应跳过授权检查,则为 true;否则为 false。默认值为
        //     false。
        public bool SkipAuthorization { get; set; }
        //
        // 摘要:
        //     获取当前 HTTP 请求的初始时间戳。
        //
        // 返回结果:
        //     当前 HTTP 请求的时间戳。
        public DateTime Timestamp { get; }
        //
        // 摘要:
        //     为当前 HTTP 响应获取 System.Web.TraceContext 对象。
        //
        // 返回结果:
        //     当前 HTTP 响应的 System.Web.TraceContext。
        public TraceContext Trace { get; }
        //
        // 摘要:
        //     为当前 HTTP 请求获取或设置安全信息。
        //
        // 返回结果:
        //     当前 HTTP 请求的安全信息。
        public IPrincipal User { get; set; }




Current 是静态对象,httpRequest是实例对象

Page 类中 

 //
        // 摘要:
        //     获取与该页关联的 System.Web.HttpContext 对象。
        //
        // 返回结果:
        //     System.Web.HttpContext 对象,它包含与当前页关联的信息。
        protected internal override HttpContext Context { get; }











--------------------编程问答-------------------- --------------------编程问答-------------------- 所有用户确实会共享一个对象

比如Session,只是每个用户都会有自己的内容

就好像静态 Dictionary<string,object)

键是通过SessionID来取,得到的是各自的内容 --------------------编程问答-------------------- request是实例对象,确实不是静态对象 --------------------编程问答-------------------- request确实是实例对象,不是静态对象
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,