Nim*_*ima 6 ajax jquery forms-authentication authorize asp.net-mvc-3
在我的MVC3项目中,我有一个带有[Authorize]属性的控制器.我有一个没有ajax的表单提交,如果他/她没有登录,它会将用户(如预期的那样)重定向到登录屏幕.
但是,现在我有一个用jquery ajax提交的表单,我怎么能做同样的事情呢?如果他/她未获得授权,请将用户重定向到登录屏幕?成功登录后,应将用户重定向到初始操作.
调节器
[Authorize]
[ValidateInput(false)]
public JsonResult SubmitChatMessage(string message)
{
if (!string.IsNullOrEmpty(message))
{
// Do stuff
}
// Return all chat messages
return GetChatMessages();
}
Run Code Online (Sandbox Code Playgroud)
客户端JQUERY
$(document).ready(function () {
$("form[action$='SubmitChatMessage']").submit(function (event) {
$.ajax({
url: $(this).attr("action"),
type: "post",
dataType: "json",
data: $(this).serialize(),
success: function (response) {
// do stuff
}
});
return false;
});
});
Run Code Online (Sandbox Code Playgroud)
我可以从firebug控制台窗口看到,服务器返回:
GET http://domain/Account/LogOn?ReturnUrl=%2fProductDetails%2fSubmitChatMessage
Run Code Online (Sandbox Code Playgroud)
期待您的帮助!
更新可能的解决方案
是的,这是我一直讨厌 ASP.NET中的表单身份验证的事情之一- 根本不满足AJAX身份验证.将IIS处理401添加到混合中,这可能会非常痛苦.
有几种方法可以做到这一点,它们都不是特别"干净".
这些包括:
在控制器中设置ViewBag标志,该标志对应于Request.IsAuthenticated,如果未经过身份验证,则将提交按钮单击事件重新写入登录页面.
让你的AJAX动作返回JsonResult,这是"代码"的属性.如果代码0可以成功,1可以是未经身份验证,2可以是其他一些数据问题等.然后在complete $.ajax回调中检查该代码并重定向到登录页面.
检查$.ajax jqXHR响应对象的状态代码403,并重定向到登录页面.
为您的提交按钮编写一个自定义HTML帮助器,它会呈现常规提交按钮或转到登录页面的锚标记,具体取决于身份验证状态.
编写自定义authorize属性,检查是否Request.IsAjaxRequest()并返回自定义JSON对象,而不是重定向到登录页面的默认行为(对于AJAX请求不会发生).
| 归档时间: |
|
| 查看次数: |
4661 次 |
| 最近记录: |