HttpContext.Current.Request和HttpContext.Request之间有什么区别吗?

时间:2013-04-17 12:55:04

标签: cookies asp.net-mvc-4 httpcontext

如果我想在控制器操作中访问Request对象,我需要编写HttpContext.Request,而如果我想在MVC视图中访问同一个对象,我需要编写HttpContext.Current.Request。 它们之间有什么区别吗? 我面临的问题是,我在控制器操作中通过HttpContext.Response.Cookies.Add设置的cookie未在MVC视图中的HttpContext.Current.Request.Cookies集合中检索,尽管我可以通过javascript看到这些cookie。

2 个答案:

答案 0 :(得分:3)

您必须在控制器中编写HttpContext.Request并在视图上编写HttpContext.Current.Request的原因是您编写的控制器继承了具有名为{{1的属性的抽象类Controller类型为HttpContext的类型。然后,视图使用密封类HttpContextBase,它为您提供当前请求的httpcontext对象。

  

它们之间有什么区别吗?

没有。因为两者都为当前请求提供了相同的HttpContext对象。

答案 1 :(得分:0)

除非我弄错了,否则你会在响应中写一个cookie,但是在下一个请求发出之前,请求中没有该cookie(即,您必须再次加载相同或新的页面)让它读取cookie)。 Cookie不是在控制器和视图之间共享信息的好方法,您应该使用ViewData或ViewBag。

此外,您必须确保在输出任何内容后没有写入cookie,这是不建议使用Response.Write的原因之一。

javascript工作的原因是它在客户端而不是在服务器上读取cookie。