所以基本上我有一个单页应用程序,它带有与 ASP.NET MVC 一起工作的 Angular。我有一个只有部分 View 的 Controller ,我希望用户无法访问它们。
通常为此我会使用[ChildActionOnly],但我不是从 View 中调用我的 MVC 部分,而是从 AJAX 中调用(我在应用程序的不同部分使用 jQuery 和 Angular 执行此操作).
有没有办法阻止用户访问我的部分内容,但让 ajax 在他们单击链接时获取它们?
谢谢,
请您参考如下方法:
虽然使用 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)
{
...
}
}
