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