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

kankankankan2222 2012-05-01 09:41:27
request是page的一个属性。我看这个属性也不是static型的。
为什么不用给page实例化,在 实例化对象.request。。
而是可以直接request。。。
这是为什么
比如可以直接这样:
protected void Button2_Click(object sender, EventArgs e)
{
int i;
string[] arr = Request.AcceptTypes;
}
...全文
265 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
传递正能量 2012-05-01
  • 打赏
  • 举报
回复
request是实例对象,确实不是静态对象
传递正能量 2012-05-01
  • 打赏
  • 举报
回复
所有用户确实会共享一个对象

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

就好像静态 Dictionary<string,object)

键是通过SessionID来取,得到的是各自的内容
传递正能量 2012-05-01
  • 打赏
  • 举报
回复
   // 摘要:
// 获取当前 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; }











传递正能量 2012-05-01
  • 打赏
  • 举报
回复
    // 摘要:
// 封装有关个别 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; }
传递正能量 2012-05-01
  • 打赏
  • 举报
回复
多谢,认错了

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


说是静态对象有错误
whycom 2012-05-01
  • 打赏
  • 举报
回复
谁告诉你他是静态对象,如果是静态对象的话,说有asp.net 用户将会共享一个对象。。。。
传递正能量 2012-05-01
  • 打赏
  • 举报
回复
看5楼啊


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


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



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









whycom 2012-05-01
  • 打赏
  • 举报
回复
照你的说法
静态对象就可以直接使用了???
例如
public class A{
public static somerefclass a;

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


whycom 2012-05-01
  • 打赏
  • 举报
回复
包装的是Context.httpRequest(手写,可能有误)是静态的对象

所有可以直接使用
传递正能量 2012-05-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

ls xiashuo
一个非静态的成员函数,如果不被一个已经实例化的对象调用,会引发nullexception
例如
class a{
public void foo(){};
}
a a1;
a1.foo();
page 已经实例化了,否则无法调用,只是实例化是由asp.net 框架负责,你看不到罢了
[/Quote]




[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?
chen_ya_ping 2012-05-01
  • 打赏
  • 举报
回复

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

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


request是page的一个属性。我看这个属性也不是static型的。
为什么不用给page实例化,
你的页面是继承page的,request是page的一个属性,所以你在你的页面中可以直接访问这个request属性。
mizuho_2006 2012-05-01
  • 打赏
  • 举报
回复
摘自MSDN


Request 属性提供对 HttpRequest 类的属性和方法的编程访问。由于 ASP.NET 页包含对 System.Web 命名空间(含有 HttpContext 类)的默认引用,因此在 .aspx 页上可以引用 HttpContext 的成员,而不需要对 HttpContext 的完全限定类引用。例如,可只使用 Request.Browser 获取客户端浏览器的功能。但是,如果要从 ASP.NET 代码隐藏模块中使用 HttpRequest 的成员,则必须在该模块中包括对 System.Web 命名空间的引用,同时还要完全限定对当前活动的请求/响应上下文以及要使用的 System.Web 中的类的引用。例如,在代码隐藏页中,必须指定全名 HttpContext.Current.Request.Browser。
whycom 2012-05-01
  • 打赏
  • 举报
回复
ls xiashuo
一个非静态的成员函数,如果不被一个已经实例化的对象调用,会引发nullexception
例如
class a{
public void foo(){};
}
a a1;
a1.foo();
page 已经实例化了,否则无法调用,只是实例化是由asp.net 框架负责,你看不到罢了
传递正能量 2012-05-01
  • 打赏
  • 举报
回复
因为你的页面已经继承System.Web.UI.Page

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

所有可以直接使用
传递正能量 2012-05-01
  • 打赏
  • 举报
回复
request确实是实例对象,不是静态对象

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧