【发布时间】:2018-02-15 03:10:46
【问题描述】:
我需要有关如何授权按角色访问 JsonResults 方法的帮助。我有下面使用自定义授权过滤器属性的示例代码,它适用于 ActionResults 和 PartialViewResults 方法,但不适用于 json结果。我想找到一种方法,如果角色名称无法访问该 JsonResults 方法,则应将其重定向 到未经授权的页面,或者只是不以某种方式执行,如果它可以访问,那么它应该执行该方法, 但在这种情况下,它的行为并非如此。即使角色有,它也不会执行 JsonResult 方法 访问它。我该如何解决这种情况? 谢谢...以下是我使用的代码
public class RedirectUnauthorizedRoles : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (this.AuthorizeCore(filterContext.HttpContext))
{
base.OnAuthorization(filterContext);
}
else
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { Controller = "Error", Action = "Unauthorised" }));
}
}
}
使用它可以正常工作
[RedirectUnauthorizedRoles(Roles = "MANAGER, ADMIN, SUPPORT")]
public ActionResult Index()
{
return View();
}
但不是在下面这个
[RedirectUnauthorizedRoles(Roles = "MANAGER, ADMIN, SUPPORT")]
public JsonResult GetSpecialData(string param1)
{
// statement here...
}
【问题讨论】:
-
如果它是
JsonResult,它建议您使用 ajax 来调用该方法,并且 ajax 调用无法重定向(它们的全部意义在于保持在同一页面中) -
是的,你是对的,但我想要发生的是如果角色有权访问它,则执行 JsonResult 方法。现在,它不会执行该方法,所以它返回 null。
-
只应用标准的
[Authorize(Roles = "..")]属性会发生什么? -
所以,如果我使用标准的 Authorize 属性,它会在网页上不断提示“需要身份验证”警报以登录您的用户名和密码,即使我登录了用户名和密码,它仍然不断提示。
-
如果您已经登录,那将毫无意义。当您通过地址栏导航到该方法时会发生什么?
标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-3 jsonresult