隐藏用户的部分视图,但将其提供给AJAX

时间:2016-07-08 21:03:00

标签: c# jquery angularjs ajax asp.net-mvc

所以基本上我有一个与Angular一起使用的单页面应用程序,它与ASP.NET MVC一起工作。我有一个只有部分视图的控制器,我希望用户无法访问它们。

通常我会使用[ChildActionOnly],但我不会从视图中调用我的MVC部分,而是从AJAX调用(我在应用程序的不同部分使用jQuery和angular执行此操作)。

有没有办法阻止用户访问我的部分内容,但是当他们点击链接时让ajax获取它们?

谢谢,

2 个答案:

答案 0 :(得分:2)

尽管使用AuthorizationAttribute来处理此问题听起来很开箱,但您可以这样做。

public class AjaxOnlyAuthorization : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAjaxRequest())
        {
            base.OnAuthorization(filterContext);
        }
        else
        {
            //..No Go
        }
    }
}

然后......

[AjaxOnlyAuthorization]
public MyAjaxOnlyClass
{
}

使用ActionFilterAttribute可能更合适,因为响应格式与授权几乎没有关系。

public class AjaxOnlyFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        ...    
    }
}

答案 1 :(得分:1)

您是否尝试过数据批注授权?您当然可以将“管理员”更改为任何组或用户,或者只使用它而无需任何用户或角色:

[Authorize(Roles = "Admin")]

您可以在课程上方或要限制的每个操作上方添加

您当然可以只在您的班级声明上方执行[授权]以确保必须登录,然后通过声明谁有权使用这些操作来更具体地针对每个操作执行