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属性。 --------------------编程问答--------------------
[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