如何在ASP.NET Core Web API中添加数据模型?GET请求报错解析
问题分析与解决方案
能不能这么实现?
不能直接这么做,问题出在HTTP规范和Swagger的请求发送逻辑上。
问题根源
HTTP标准明确规定:GET/HEAD方法的请求不允许携带请求体。虽然ASP.NET Core后端理论上支持从GET请求的body绑定模型,但Swagger依赖浏览器的fetch API发送请求,而fetch会严格遵守HTTP规范,一旦发现GET请求带body就直接抛出你看到的TypeError。
两种可行的解决办法
1. 改用POST请求(推荐)
把接口改成POST方法,用请求体传递复杂模型,这符合HTTP规范,Swagger也能正常调用:
[HttpPost("SQLite/ExcelReport/")] public FileResult GetExcelReport([FromBody] SomeComplexDataModel someComplexDataModel) { // 你的业务代码,返回文件 }
2. 坚持用GET:将模型属性转为查询参数
如果业务上必须用GET,可以不用改控制器的HttpGet特性,ASP.NET Core会自动把模型的每个属性映射为URL的查询参数。比如请求URL会变成:/SQLite/ExcelReport/?DOSomething=true&DoThisAndThis=false&StartDateDaily=2024-01-01T00:00:00
不过要注意两点:
- DateTime参数需要用ISO 8601格式(比如
yyyy-MM-ddTHH:mm:ss),Swagger会自动生成符合要求的输入框 - URL有长度限制,如果模型属性太多、参数值太长,可能会触发浏览器或服务器的长度限制报错,这种情况还是POST更稳妥
内容的提问来源于stack exchange,提问作者Christoph1972
相关产品推荐
相关产品推荐

