所以基本上我有一个与Angular一起使用的单页面应用程序,它与ASP.NET MVC一起工作。我有一个只有部分视图的控制器,我希望用户无法访问它们。
通常我会使用[ChildActionOnly]
,但我不会从视图中调用我的MVC部分,而是从AJAX调用(我在应用程序的不同部分使用jQuery和angular执行此操作)。
有没有办法阻止用户访问我的部分内容,但是当他们点击链接时让ajax获取它们?
谢谢,
答案 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")]
您可以在课程上方或要限制的每个操作上方添加
您当然可以只在您的班级声明上方执行[授权]以确保必须登录,然后通过声明谁有权使用这些操作来更具体地针对每个操作执行