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

ASP.NET MVC Action方法返回文件时GET请求被拦截如何解决

问题原因

这个报错是因为ASP.NET MVC默认禁止GET请求返回JsonResult,防止敏感信息通过URL泄露。你遇到这个报错说明你的接口逻辑中存在返回JsonResult的分支(比如API调用失败时返回错误信息的Json),没有显式配置允许GET请求访问。同时你当前用GET请求传递token也存在安全风险,token会保存在浏览器历史、服务器日志等位置容易泄露。

修复方案

方案1:保留GET请求,修改Json返回配置

如果需要保留GET请求的实现,只要在所有返回JsonResult的位置添加JsonRequestBehavior.AllowGet参数即可,同时修正你代码中的语法错误:

[HttpGet]
public ActionResult GetFile(string fileId, string token)
{
    try
    {
        // call API with token and file Id
        // get bytes from string reponse
        
        // 修正语法错误:bytes[] 改为 byte[],添加分号
        byte[] fileDownload = Convert.FromBase64String(apiResult.filecontent);
        return File(fileDownload, "application/pdf", "test_download.pdf");
    }
    catch(Exception ex)
    {
        // 示例:如果有返回Json的错误分支,添加AllowGet参数
        return Json(new { success = false, msg = ex.Message }, JsonRequestBehavior.AllowGet);
    }
}

方案2:改为POST请求(更安全,更推荐)

这种方式既可以规避GET请求的Json安全限制,也能避免token等敏感信息放在URL中泄露,修改方式如下:

  1. 前端jQuery代码修改为动态创建表单提交POST请求:
// jQuery ajax to get fileId and token
const form = $('<form method="POST" action="/APIFileDownload/GetFile"></form>');
form.append(`<input type="hidden" name="fileId" value="${response.fileId}">`);
form.append(`<input type="hidden" name="token" value="${response.token}">`);
$('body').append(form);
form.submit();
form.remove();
  1. 后端Action修改为接收POST请求:
[HttpPost]
public ActionResult GetFile(string fileId, string token)
{
    // call API with token and file Id
    // get bytes from string reponse
    
    byte[] fileDownload = Convert.FromBase64String(apiResult.filecontent);
    return File(fileDownload, "application/pdf", "test_download.pdf");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:54:04