asp.net-mvc - ASP.NET MVC : Enforce AJAX request on an action

标签 asp.net-mvc ajax actionmethod controller-action

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

在调用 action 方法之前执行此操作的最佳方法是什么? 我想从我的操作方法中重构以下内容:

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

我所设想的是一个 ActionMethodSelectorAttribute可以像 [AcceptVerbs] 一样使用属性。不过,我没有创建此类自定义属性的经验。

最佳答案

创建一个触发 OnActionExecuting 的 ActionFilter

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

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

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

关于asp.net-mvc - ASP.NET MVC : Enforce AJAX request on an action,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4168341/

相关文章:

jquery - 在 asp mvc 中使用 jquery 更改下拉列表时填充列表框

asp.net-mvc - MvcMailer:通过模型在 View 中获取用户输入,然后将其插入邮件

asp.net-mvc - 使用 ServiceStack MVC Powerpack + Funq 进行构造函数注入(inject)

php - Ajax 在 for 循环中同时执行所有操作

jquery - 如果存在错误,则阻止表单提交 ajax .submit() 和 .change()

asp.net-mvc - .NET MVC : How to redirect response within a helper method

jquery - 导航到新页面/操作方法时的 MVC 3 Ajax 加载图标

asp.net - 如何访问 .cshtml Razor 文件中的项目属性?

ajax - 使用knockoutjs构建动态表单

asp.net-mvc - 在 ASP.NET MVC 中调用 @Html.Action(...) 时如何指定命名空间