是否可以阻止对 json 结果的任何其他使用并只允许来自我的应用程序的请求?当我们使用这样的东西时:
Json(q, JsonRequestBehavior.AllowGet)
它允许来自任何地方的所有请求。是否存在任何身份验证来检查请求的来源?
是否可以阻止对 json 结果的任何其他使用并只允许来自我的应用程序的请求?当我们使用这样的东西时:
Json(q, JsonRequestBehavior.AllowGet)
它允许来自任何地方的所有请求。是否存在任何身份验证来检查请求的来源?
我想你的意思是:
如何只允许 AJAX 请求?
如果是这样,请查看以下博客文章。它描述了创建一个可重用的过滤器:
代码看起来很简单,但我自己没有使用过:
public class AjaxOnlyAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(!filterContext.HttpContext.Request.IsAjaxRequest())
filterContext.HttpContext.Response.Redirect("/error/404");
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
}
}
然后您可以将其应用于控制器和操作:
[AjaxOnly]
public ActionResult AjaxActionMethod()
{
//....
}
过滤器代码假定某个控制器上存在可以通过以下路线到达的操作:
/error/404
结果,我修改了代码,并生成了一种添加任意错误路由的简单方法(默认值为“/error/404”):
public class AjaxOnlyAttribute : ActionFilterAttribute
{
public AjaxOnlyAttribute(){}
public AjaxOnlyAttribute(string ErrorRoute)
{
this.ErrorRoute = ErrorRoute;
}
string errorRoute = "/Error/404"; // default route
public string ErrorRoute
{
get { return errorRoute; }
set { errorRoute = value; }
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.HttpContext.Request.IsAjaxRequest())
filterContext.HttpContext.Response.Redirect(this.ErrorRoute); //
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
}
}
现在可以按如下方式使用:
[AjaxOnly(ErrorRoute = "/MyArbitraryRoute/MyArbitraryParameter")
public ActionResult AjaxActionMethod()
{
//....
}
将 [Authorize] 属性添加到您要保护的方法或控制器。您可以指定组成员身份,并且需要登录。
如果您只想让您自己的应用程序调用某个方法,请将方法声明从 public 更改为 internal。这会将方法的范围限制为从应用程序内部调用。