真的很挣扎于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”模型的任何属性时,我得到一个空引用异常。
那么,我还尝试了什么:
(不可否认,我对这些之间的差异非常粗略 - 以前从来不需要担心它)
我无法做到的事情:
另外值得一提的是,该网站正在使用MVC4 RC - 尽管RC功能未在网站的这个特定部分使用。
非常欢迎任何想法或评论!
感谢。
答案 0 :(得分:1)
这是我系统上的问题 - 我有一个包含下划线的服务器名称。 RFC 952不允许在主机名中包含下划线,并且可能会干扰设置cookie的能力,从而影响会话的持续性。
为了追踪这一点,我开始在每个控制器部分观察SessionID,并注意到每个帖子都在改变。这只发生在我们的测试服务器上,因为我们用_t命名它以显示它是一台测试机器。哎哟!
我找到了this point。
这可能会带来其他价值。
我希望这会有所帮助
大卫
答案 1 :(得分:0)
The problem for me was I had this set in my web.config file, but wasn't using SSL:
<httpCookies requireSSL="true" />
This setting prevents cookies from working over unsecure (i.e. non-SSL) connections - including the ASP.NET session cookie.