直接用 dotnet new webapi 创建项目时,应加 --no-https 参数避免 https 重定向问题,使用 .net 6+ minimal hosting 模式,控制器需继承 controllerbase 并标注 [apicontroller] 特性,post 接收 json 须用 [frombody] 且属性为 public,推荐返回类型为 actionresult 以兼顾状态码控制与 swagger 文档生成。

直接用 dotnet new webapi 创建的项目,90% 的 404、400、跨域失败、字段名大小写异常,都不是框架问题,而是默认配置和显式约定没对齐。
dotnet new webapi 命令该加哪些参数
默认命令 dotnet new webapi -n MyApi 会启用 HTTPS 重定向、HSTS 和 Swagger,但开发调试时经常卡在 307 重定向或 Swagger 空白页。最稳妥的起步方式是:
- 加
--no-https:避免本地调试时因 HTTPS 配置不全导致请求被无限重定向 - 不加
--framework net5.0:除非必须兼容旧版 Startup.cs 结构,否则新项目一律用 .NET 6+ Minimal Hosting(即单文件Program.cs) - 若需 Swagger,确保
Program.cs中有这两行(模板默认已含):builder.Services.AddEndpointsApiExplorer()和builder.Services.AddSwaggerGen()
[ApiController] 和 ControllerBase 是什么关系
控制器类必须同时满足两个条件才能被路由识别并启用 API 特性:
- 继承
ControllerBase(不是Controller),因为后者带 View 相关方法,纯 API 场景下多余且可能干扰依赖注入 - 顶部标注
[ApiController]特性,它会自动启用三件事:模型验证失败返回 400、绑定失败自动跳过、JSON 序列化默认驼峰命名
漏掉任一条件,比如只继承 ControllerBase 但没加特性,就会出现 GET 正常、POST 总是 400 Bad Request 却找不到原因的情况。
POST 接收 JSON 数据总为 null 怎么办
这是新手最高频的绑定失败场景,本质是没满足三个硬性条件:
- DTO 类中属性必须是
public,字段(field)或private属性无法被序列化器读取 - 控制器方法参数必须显式标记
[FromBody],.NET 6+ 不再隐式尝试从 Body 绑定对象 - 请求头必须包含
Content-Type: application/json,用 curl 测试时别漏掉-H "Content-Type: application/json"
例如这个写法一定失败:public IActionResult Create(User user);正确写法是:public IActionResult Create([FromBody] User user)。
ActionResult 为什么比 IActionResult 或 Task 更合适
选错返回类型会导致两种典型后果:Swagger 文档缺失响应结构,或无法主动控制 HTTP 状态码。
- 只用
IActionResult:编译期无类型检查,Swagger 不知道成功时返回什么 JSON 结构 - 只用
Task<weatherforecast></weatherforecast>:只能返回 200,遇到数据不存在时无法返回NotFound(),前端收到空响应却以为是成功 - 用
ActionResult<weatherforecast></weatherforecast>:既能return Ok(model),也能return NotFound(),且 Swagger 自动推导 200 响应体 Schema
真正容易被忽略的是:即使你 100% 确信某接口永远有数据,业务逻辑也常会在中间加权限校验、缓存穿透判断等分支——这些地方一旦需要返回非 200,ActionResult<t></t> 就成了唯一安全选择。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










