真的在为 MVC / TempData / Session / 可能是 IIS6 类型的问题而苦苦挣扎。
我有一个简单的 MVC 网站 - 主控制器如下所示:
public class DemoController : Controller
{
[HttpPost]
public RedirectToRouteResult Index(SomeObject obj)
{
_someService.DoStuffWith(obj);
TempData.Add("SomeObject", obj);
return RedirectToAction("Index");
}
[HttpGet]
public ViewResult Index()
{
var obj = TempData.Peek("SomeObject") as SomeObject;
return View("Hello", obj);
}
}
所以这是一个超级简单的 Post Redirect Get - 从某个地方提交数据,在 Post-friendly 操作中获取它,用它做一些事情,将它插入临时数据,重定向到 Get-friendly,再次拿起它,粘住用户在模型中的对象的新视图上。之前已经实现了十几次,从来没有出现过问题,但它一直在 IIS7 上。
在 cassini 和本地 IIS 7.5 上本地运行时,这完全符合预期。但是,一旦我部署到 Server 2003 和 IIS6,当我第一次尝试访问视图中“SomeObject”模型的任何属性时,我得到一个空引用异常。
那么,我还尝试了什么:
- 我已经放弃了 TempData 并将其推入 Session["Whatever"] - 结果相同
- 我已经推入 HttpContext.Current.Session["Whatever"] - 结果相同
- 我已经推入 ControllerContext.HttpContext.Session["Whatever"] - 结果相同
(诚然,我对这些之间的差异很粗略 - 以前从来不需要担心它)
- 我已确保在 IIS 上打开了会话状态。
- 我检查了 Asp.net 会话标识符在请求之间没有变化。
- 我已经部署到 2 个单独的服务器,都运行 2003 和 IIS6,两者的结果相同
- 明确使用 SessionStateBehaviour.Required
我不能做的事情:
- 在我的本地计算机之外部署到 IIS7
- 使用 SqlServer 会话状态
- 使用 StateServer SessionState
另外值得一提的是,该站点正在使用 MVC4 RC——尽管站点的这个特定部分没有使用 RC 功能。
欢迎任何想法或意见!
谢谢。