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

已添加JsonRequestBehavior.AllowGet仍遇GET请求JSON返回错误求助

ASP.NET MVC GET请求返回Json仍报错的解决方案

明明在[HttpGet]标记的GetOrders方法中指定了JsonRequestBehavior.AllowGet,却依然收到禁止GET返回Json的错误,结合日志和代码,可从以下几个方向排查解决:

1. 检查过滤器是否拦截修改了JsonResult

项目中如果存在自定义ActionFilterAttribute或全局注册的过滤器,部分安全类过滤器会强制将JsonResult的JsonRequestBehavior重置为默认的DenyGet。比如类似这样的过滤器代码:

public class SecureJsonFilter : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        var jsonResult = filterContext.Result as JsonResult;
        if (jsonResult != null)
        {
            // 错误强制设置为DenyGet
            jsonResult.JsonRequestBehavior = JsonRequestBehavior.DenyGet;
        }
    }
}

若存在此类过滤器,需修改逻辑,允许目标Action的GET请求返回Json。

2. 确认返回的JsonResult未被基类方法替换

如果控制器继承了自定义基类,且基类重写了Json方法,可能会忽略你传入的JsonRequestBehavior参数。比如基类中的重写:

public class BaseController : Controller
{
    protected override JsonResult Json(object data)
    {
        // 未传入JsonRequestBehavior,默认使用DenyGet
        return base.Json(data);
    }
}

这种情况可以直接在Action中实例化JsonResult,绕过基类方法:

[HttpGet]
public JsonResult GetOrders()
{         
    var jsonResult = new JsonResult
    {
        Data = newList,
        JsonRequestBehavior = JsonRequestBehavior.AllowGet
    };
    return jsonResult;
}

3. 验证请求是否匹配目标Action

通过在GetOrders方法中添加断点或日志,确认请求确实进入了该方法。若路由配置存在冲突,请求可能被导向其他未设置AllowGet的Json返回Action,从而触发错误。


你提供的日志和代码

错误日志

To allow GET requests, set JsonRequestBehavior to AllowGet. [stackTrace]    at System.Web.Mvc.JsonResult.ExecuteResult(ControllerContext context)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass3_6.<BeginInvokeAction>b__4()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass3_1.<BeginInvokeAction>b__1(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult)
   at System.Web.Mvc.Controller.<>c.<BeginExecuteCore>b__152_1(IAsyncResult asyncResult, ExecuteCoreState innerState)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
   at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)
   at System.Web.Mvc.Controller.<>c.<BeginExecute>b__151_2(IAsyncResult asyncResult, Controller controller)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
   at System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)
   at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult)
   at System.Web.Mvc.MvcHandler.<>c.<BeginProcessRequest>b__20_1(IAsyncResult asyncResult, ProcessRequestState innerState)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End()
   at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
   at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

相关代码

[HttpGet]
public JsonResult GetOrders()
{         
   return Json(newList, JsonRequestBehavior.AllowGet);
}            

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:10:33