2010-11-05 66 views
1

我重构,原本用于POST'ed表单数据一些MVC代码。表单的字段使用jQuery的序列化()方法序列化和发送到MVC控制器保存操作,检查的东西出来,重定向合适(如果表单值错误,重定向到编辑操作,如果细然后保存并重定向到显示操作)。所有操作都通过AJAX调用并返回部分视图。一切都很好。注意:该站点使用基于AD的授权,因此在首次加载站点时提示用户输入其Windows凭据,但不会再次提示用户。asp.net的MVC 2 - 失去授权时RedirectToAction使用JSON数据

但是,我现在正在通过JSON对象而不是表单域与服务器进行交互。当然,我序列化客户端上的JSON对象,并借助于导入的MVC2 Futures/MVC3类JsonValueProviderFactory,能够正确建模将发送的JSON对象绑定到Controller参数中的C#类。

我保持相同的逻辑,但当我尝试返回RedirectToAction ActionResult时,事情开始爆炸,当Controller接受JSON对象。我失去了身份验证,再次提示用户输入他们的凭据,我发现自己在最初请求的操作(保存)中处于无限循环。每次提示用户输入凭据时,都会再次通过保存操作。用户的最终结果是提示登录凭证的无止境的警报。在RedirectToAction调用中指定的操作都不会被触发。

可以在原始请求使用JSON的contentType与RedirectToAction的行为干扰的事实?这是我能想到的唯一的事情,因为当我不使用JSON发布时它可以正常工作,并且在返回PartialViews而不是使用RedirectToAction时它工作正常。 Controller Action的无限重复和授权证书的持续丢失似乎表明RedirectToAction在这种情况下并不适用。

我可以要求张贴代码。我也成功地处理了像将ModelState复制到TempData和其他RedirectToAction技巧的东西。同样,它在使用非JSON解决方案时工作。任何有识之士,非常感谢!


随访信息编辑:

事实证明,我得到一个“未经授权”的错误,甚至当我完全禁用NTLM身份验证/授权的网站。 IIS服务器不寻找任何授权,网站不寻找任何授权,但尝试使用JSON contentType请求重定向时仍然出现错误,并抱怨说“未经授权”。这是WEIRD。

回答

0

要更新每个人,我还没有找到解决方案,也不知道情况是什么。不过,我敢打赌,它与RedirectToAction发出http GET请求以及我重定向到只接受POST的动作有关。即使我删除了限制,它仍然会发送JSON数据,并且仍然需要通过POST完成。

简而言之,带有JSON数据的RedirectToAction看起来基本上是可撤销的。您需要POST POST JSON数据,但RedirectToAction会发出GET请求。至少,这是我的理论。 =)