授权失败时更改ModelState

时间:2015-08-29 06:44:11

标签: asp.net-mvc asp.net-mvc-5 asp.net-identity asp.net-mvc-filters

我写了一个自定义授权过滤器:

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数据有任何建议吗?

1 个答案:

答案 0 :(得分:0)

您可以使用transform-style: preserve-3d返回您想要的任何结果,在我的情况下,我想取消Kendo Grid的更改并添加我使用此代码实现的模型状态错误:

context.Result