我正在寻找一种仅通过AJAX请求访问控制器的操作的方法。

在调用动作方法之前,最好的方法是什么? 我想从我的动作方法中重构以下内容:

if(Request.IsAjaxRequest())
    // Do something
else
    // return an error of some sort

我想象的是 ActionMethodSelectorAttribute 可以像 [AcceptVerbs] 属性。不过,我没有经验来定制属性。

有帮助吗?

解决方案

创建一个触发Onationexecuting的动作窗口

public class AjaxActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!filterContext.HttpContext.Request.IsAjaxRequest())
            filterContext.Result = new RedirectResult(//path to error message);           
    }
}

设置过滤器的结果属性将阻止执行ActionMethod。

然后,您可以将其作为属性应用于您的ActionMethods。

其他提示

它很简单:

public class AjaxOnly : ActionMethodSelectorAttribute
{
    public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo)
    {
        return controllerContext.HttpContext.IsAjaxRequest();
    }
}

我只是忘记了isajaxrequest()来自哪里,我从我的代码中粘贴了,但“丢失”了这种方法。 )

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top