我有一个.NET MVC控制器操作,它将JsonResult返回给YUI AsyncRequest回调。一切正常,AsyncRequest调用和“内容”模型数据已成功更新。我现在如何确保在进行AsyncRequest之前记录用户?
通常我会使用[Authorize]属性将错误返回给我的YUI AsyncRequest,因为它期待Json结果。
我也尝试过检查“User.Identity.IsAuthenticated”,但仍然没有爱.RedirectToRoute似乎什么也没做。
我已经能够将一个Json结果发送回JS,表明用户需要登录,但我宁愿让用户将用户重定向到LogOn视图。
以下是Controller操作:
[JsonFilter(Param="content"), JsonDataType=typeof(Content)]
public ActionResult SaveJson(Content content)
{
if (!User.Identity.IsAuthenticated)
RedirectToRoute(new { Action="LogOn", Controller="Account"});
contentRepository.Update(content);
return Json(new {Result = "sucess"});
}
TIA!
答案 0 :(得分:1)
您可以执行以下操作:
[JsonFilter(Param="content"), JsonDataType=typeof(Content)]
public ActionResult SaveJson(Content content)
{
if (!User.Identity.IsAuthenticated)
{
var urlHelper = new UrlHelper(ControllerContext.RequestContext);
return Json(new {Result = "unauthenticated" , Url = urlHelper.Action("LogOn", "Account")});
}
contentRepository.Update(content);
return Json(new {Result = "sucess"});
}
您将使用urlHelper.Action(“LogOn”,“Account”)部分结果将位置更改为登录页面(window.location.href = ...)。
附加说明:您可以将urlHelper.Action(“LogOn”,“Account”)移动到您的视图中,作为回调函数的一部分。
答案 1 :(得分:1)
我认为语义上正确的做法是返回带有401(未授权)状态代码的HTTP响应,并让js决定如何响应。我不熟悉YUI,但在jQuery中你可以设置一个错误回调函数,就像这样...
function BasicJSONPost(urlToPost, dataToSend, onSuccess) {
$.ajax({
url: urlToPost,
data: dataToSend,
dataType: "json",
type: "POST",
success: onSuccess,
error: function(XMLHttpRequest, textStatus, errorThrown) {
HandleAjaxError(XMLHttpRequest, textStatus, errorThrown);
}
});
}
function HandleAjaxError(XMLHttpRequest, textStatus, errorThrown) {
if (XMLHttpRequest.status == 401) {
window.location.href = '/account/login';
}
}