我自定了一个授权过滤器,验证如果没有通过就返回到登录页面/Account/Login问题:有些操作ajax,如果没有登录,希望返回的是一个代码,比如一个整数。 该怎么做?
webconfig
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>public class UserAuthorize : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (!httpContext.Request.IsAuthenticated) //首要条件:必须登录,必须有身份验证票。
return false; string controller = httpContext.Request.RequestContext.RouteData.Values["controller"].ToString();
string action = httpContext.Request.RequestContext.RouteData.Values["action"].ToString(); using (var db = new WEBVODEntities())
{
List<CtrlActRole> tempList = db.CtrlActRole.Where(a => a.ControllerName == controller && a.ActionName == action).ToList();
if (tempList.Count == 0) //如果没有找到记录,表示不需要权限控制
return true; foreach (var ctrlActRole in tempList)
{ string roleField = ctrlActRole.RoleField; //获取对应的数据库字段 RegisteredUser oldUser = CommonUtils.GetCurrentUser();
if (oldUser == null)
return false; var roleList = db.ExecuteStoreQuery<Role>("select top 1 * from role where " + roleField + "=1 and id={0}", oldUser.RoleId).ToList(); // 查看相应的角色,对应字段是否==true if (roleList.Count > 0) //如果有记录,表示有权限(这个地方应该显示相应的提示,不是直接返回到登录界面)
return true;
}
}
return false;
}
}
找到一个答案,但是里边关于json这一段有些不明白 context.Result = new JsonResult
{
Data = new
{
Error = "NotAuthorized",
LogOnUrl = urlHelper.Action("Login", "Account")
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
}; protected override void HandleUnauthorizedRequest(AuthorizationContext context)
{
if (context.HttpContext.Request.IsAjaxRequest())
{
UrlHelper urlHelper = new UrlHelper(context.RequestContext);
context.Result = new JsonResult
{
Data = new
{
Error = "NotAuthorized",
LogOnUrl = urlHelper.Action("Login", "Account")
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
};
}
else
{
base.HandleUnauthorizedRequest(context);
}
}
new JsonResult
{
Data = 整数值,
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
};
问题:下边是我写的ajax,在已经登录的情况下,是正常工作的。如果没有登录,我在ajax里边该怎么判断?
new JsonResult
{
Data = -3,
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
}; $("#chatform").submit(function () {
if (jQuery.trim($("#Content").val()) == "") {
alert("评论内容不能为空"); return false;
}
var f = $("#chatform");
var action = f.attr("action");
var serializedForm = f.serialize();
$.ajax({
type: "Post",
url: action,
data: serializedForm,
error: function (res, status, ex) { alert("发表评论失败"); },
success: function (cms) {
if (cms == "-1") { alert("对不起,发表评论失败"); }
else { alert("评论发表成功,谢谢支持!"); $("#Content").val(""); $("#div_chatlist").html(cms); }
}
});
return false;
})
写好了,谢谢!!
protected override void HandleUnauthorizedRequest(AuthorizationContext context)
{
if (context.HttpContext.Request.IsAjaxRequest())
{
UrlHelper urlHelper = new UrlHelper(context.RequestContext);
context.Result = new JsonResult
{
Data = new
{
StatusCode = -3,
LogOnUrl = urlHelper.Action("Login", "Account")
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
};
}
else
{
base.HandleUnauthorizedRequest(context);
}
}
function Bind_FavoSumbit() { $("#favoriteform").submit(function () { var f = $("#favoriteform");
var action = f.attr("action");
var serializedForm = f.serialize();
$.ajax({
type: "Post",
url: action,
data: serializedForm,
error: function (res, status, ex) { alert("收藏失败"); },
success: function (date) {
var cms = date.StatusCode;
if (cms == -3) { alert("对不起,你没有登录"); }
else if (cms == -1) { alert("对不起,收藏失败"); }
else {
if (cms == 11)
{ alert("已经收藏过!"); }
if (cms == 2)
{ alert("收藏成功,谢谢支持!"); }
}
}
});
return false;
})}