【发布时间】:2015-11-23 20:17:35
【问题描述】:
我写了一个自定义的授权过滤器:
public class MyAuthenticationAttribute : FilterAttribute, IAuthorizationFilter{
// Do the authorization
if (!isAuthenticated)
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
这个过滤器有各种条件,如果用户没有被授权,最终将结果设置为Unauthorized,如果用户被授权则什么都不做。
它在 SPA 应用程序中使用,我的几乎所有方法都是从网格调用的。在这些网格中,我有自定义错误处理程序,如果出现问题,它将显示友好的通知。所有错误都添加到ModelState。
现在,我想管理未经授权的行为,并在用户无权执行删除操作时更改 ModelState。
请指导我应该如何实现它以及我需要覆盖哪些方法。
更新
我可以用这条线改变模型状态:
filterContext.Controller.ViewData.ModelState.AddModelError("", "GO AWAY!");
但它不会向用户返回任何内容。我试过在挑战方法中使用IAuthenticationFilter并添加ModelState错误,但也没有用。
如果我可以返回一些 Json 数据,我想它会正常工作。
我需要以某种方式获得此操作方法的类似行为:
public ActionResult Delete([DataSourceRequest] DataSourceRequest request, object model)
{
ModelState.AddModelError("", "error");
return Json(new[] { model}.ToDataSourceResult(request, ModelState));
}
有可能吗?您对实现此授权并返回Json 数据有什么建议吗?
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-5 asp.net-identity asp.net-mvc-filters