You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过自定义特性忽略非Ajax请求下的方法执行?

解决非Ajax请求跳过Action执行的问题

其实很简单,你只需要给filterContext.Result赋值一个合适的ActionResult实现,这样MVC就会直接返回这个结果,跳过后续的Action方法执行。这里有几个实用的方案:

  • 返回403禁止访问(推荐):明确告诉客户端这个接口不允许非Ajax请求访问,语义最准确

    using System.Net;
    using System.Web.Mvc;
    
    public class AjaxOnlyAttribute : ActionFilterAttribute 
    { 
        public override void OnActionExecuting(ActionExecutingContext filterContext) 
        { 
            if (!filterContext.HttpContext.Request.IsAjaxRequest()) 
            { 
                filterContext.Result = new HttpStatusCodeResult(HttpStatusCode.Forbidden);
            } 
        } 
    }
    
  • 返回404资源未找到:如果不想暴露接口存在的话,可以用这个

    filterContext.Result = new HttpNotFoundResult();
    
  • 返回自定义提示内容:如果需要给用户明确的文字提示

    filterContext.Result = new ContentResult
    {
        Content = "该方法仅支持Ajax请求访问",
        ContentType = "text/plain",
        StatusCode = (int)HttpStatusCode.BadRequest
    };
    

原理是:当你为filterContext.Result赋值后,MVC的执行流程会直接跳转到结果返回阶段,不会再调用你的AjaxOnlyMethod方法,完美实现“忽略执行”的需求。

内容的提问来源于stack exchange,提问作者Slava Podolskiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:58:51