gpt4 book ai didi

asp.net mvc [handleerror] [authorize] 与 JsonResult?

转载 作者:行者123 更新时间:2023-12-02 08:54:15 25 4
gpt4 key购买 nike

在处理来自 javascript 的 XHR 调用时,利用现有 [HandleError] 和 [Authorize] 属性的优雅方法是什么?

因此,举例来说,GetJson 方法返回 JsonResult。

当发生错误时,[HandleError]方法将返回一个ViewResult,该ViewResult将在javascript的回调函数中检索。

然后我必须在 JavaScript 中的任何地方放置自定义代码来处理和重定向任何崩溃等。

我想做的是让 [HandleError] 属性返回一个 JsonResult(如果原始操作计划这样做)。这可能是我的一厢情愿。

类似地,如果传入未经授权的 Json 请求,我不会返回新的 HttpUnauthorizedResult,而是返回一个 JsonResult,它允许我的客户端代码以通用方式处理事务。

我是不是找错树了?也许 MVC 有一种更好的方法可以处理我不知道的问题?

其他人如何处理这种情况?

谢谢。

PS:我意识到我可以创建自己的 [HandleJsonError] 和 [AuthorizeJson] 属性,它们返回 JsonResults 而不是 ViewResults,但随后我必须四处走动并将它们放置在任何返回 Json 的方法上,并担心 Filter顺序等。如果我可以使用反射或其他东西来使相同的属性根据原始方法的签名而采取不同的行为,那肯定会很好。

最佳答案

你不知道。目前,他们对 JSON 没有帮助。但是:

I realize I can create my own [HandleJsonError] and [AuthorizeJson] attributes which return JsonResults instead of ViewResults, but then I'd have to go around and place these on any method that returns Json, and worry about Filter order etc.

我们所做的是子类型现有属性,并使它们有条件地工作:

public sealed class AjaxAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext.Result == null)
{
return;
}
else if (filterContext.Result.GetType() == typeof(HttpUnauthorizedResult)
&& filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.Result = new ContentResult();
filterContext.HttpContext.Response.StatusCode = 403;
}
}
}

现在 JS 代码可以查找 403(因为 ASP.NET 处理 401 并返回错误页面),并且相同的属性适用于 Ajax 和非 Ajax。因此不存在过滤器顺序问题。

关于asp.net mvc [handleerror] [authorize] 与 JsonResult?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1609677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com