asp.net – 当用户未通过身份验证时如何处理ajax请求?
|
当用户未通过身份验证时,如何处理ajax请求? 有人进入页面,留下一个小时的空间,返回,在使用jQuery($ .post)的页面上添加评论。由于他没有认证,方法返回RedirectToRoute结果(重定向到登录页面)。你做什么?在客户端如何处理它,如何在控制器中处理? 解决方法编辑:我以前写过上面的答案,现在我相信发送403是不正确的方法。 403具有略微不同的含义,它不应该被使用。这是使用401的更正属性。它仅与Http401Result中的附加context.HttpContext.Response.End()和不同的HTTP代码不同: public class OptionalAuthorizeAttribute : AuthorizeAttribute
{
private class Http401Result : ActionResult
{
public override void ExecuteResult(ControllerContext context)
{
// Set the response code to 401.
context.HttpContext.Response.StatusCode = 401;
context.HttpContext.Response.Write(CTRes.AuthorizationLostPleaseLogOutAndLogInAgainToContinue);
context.HttpContext.Response.End();
}
}
private readonly bool _authorize;
public OptionalAuthorizeAttribute()
{
_authorize = true;
}
//OptionalAuthorize is turned on on base controller class,so it has to be turned off on some controller.
//That is why parameter is introduced.
public OptionalAuthorizeAttribute(bool authorize)
{
_authorize = authorize;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
//When authorize parameter is set to false,not authorization should be performed.
if (!_authorize)
return true;
var result = base.AuthorizeCore(httpContext);
return result;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
{
//Ajax request doesn't return to login page,it just returns 401 error.
filterContext.Result = new Http401Result();
}
else
base.HandleUnauthorizedRequest(filterContext);
}
}
旧答案: 虽然我喜欢在其他答案(我以前有一个想法)发布的想法,我需要代码示例。他们来了: 修改授权属性: public class OptionalAuthorizeAttribute : AuthorizeAttribute
{
private class Http403Result : ActionResult
{
public override void ExecuteResult(ControllerContext context)
{
// Set the response code to 403.
context.HttpContext.Response.StatusCode = 403;
context.HttpContext.Response.Write(CTRes.AuthorizationLostPleaseLogOutAndLogInAgainToContinue);
}
}
private readonly bool _authorize;
public OptionalAuthorizeAttribute()
{
_authorize = true;
}
//OptionalAuthorize is turned on on base controller class,it just returns 403 error.
filterContext.Result = new Http403Result();
}
else
base.HandleUnauthorizedRequest(filterContext);
}
}
HandleUnauthorizedRequest被覆盖,所以在使用Ajax时返回Http403Result。 Http403Result将StatusCode更改为403,并向用户返回消息。在属性(授权参数)中有一些额外的逻辑,因为我打开了基本控制器中的[Authorize]并在某些页面中禁用它。 另一个重要的部分是在客户端对全局进行此响应。这是我在Site.Master中放置的: <script type="text/javascript">
$(document).ready(
function() {
$("body").ajaxError(
function(e,request) {
if (request.status == 403) {
alert(request.responseText);
window.location = '/Logout';
}
}
);
}
);
</script>
我放置一个GLOBAL ajax错误处理程序,并且当$ .post失败并出现403错误时,响应消息将被提醒,并将用户重定向到注销页面。现在我不需要处理每个$ .post请求中的错误,因为它在全局处理。 为什么是403,而不是401? 401由MVC框架内部处理(这就是为什么重定向到登录页面是在授权失败后完成的)。 你怎么看待这件事? (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.NET MVC:AJAX调用的控制器是否返回JSO
- asp.net – 以编程方式将Textbox TemplateField列添加到Gri
- asp.net-mvc – Editor为int选择一个字符串模板
- asp.net – aspx中__EVENTVALIDATION __VIEWSTATE的目的是什
- asp.net – web.config allowDefinition = MachineToApplic
- 如何避免异常捕获.NET中的复制粘贴
- Asp.NEt邮箱验证修改密码通过邮箱找回密码功能
- asp.net-mvc – 如何用asp.net mvc 3和ListBoxFor显示多个选
- asp.net-mvc-5 – 在禁用的TextBoxFor中只读是什么?
- asp.net-mvc – 如何防止在DataBase First Model中删除Data
- asp.net-web-api – 我可以在WebAPI messageHand
- 经典ASP亚马逊s3休闲授权
- asp.net – 将linq查询结果转换为datatable C#
- asp.net-mvc – 来自SignalR的这些轮询请求来自哪
- asp.net-mvc – 如何在.net MVC中使用Flux和事件
- asp.net-mvc – angular js和asp.net mvc 4示例应
- 集成ASP.NET Webforms,WebAPI和AngularJS
- 如何在asp.net中更改javascript警告框的标题?
- 在asp.net中输入密钥发出错误按钮
- asp.net-mvc-3 – 哪里和如何定义我的asp.net MV
