直接用 dotnet new webapi 创建项目必须加 --no-https 避免 307 重定向;控制器需同时继承 controllerbase 并标注 [apicontroller];post 接收 json 时参数须加 [frombody]、dto 属性为 public、请求头含 content-type: application/json;推荐返回 actionresult 以支持状态码与 swagger 文档。

直接用 dotnet new webapi 创建项目,不加参数就跑起来,90% 的人会在 5 分钟内遇到 307 重定向、400 Bad Request 或 404 —— 这些不是代码写错了,而是默认配置和实际使用场景没对齐。
创建项目时必须加 --no-https
本地调试时,dotnet new webapi -n MyApi 默认启用 HTTPS 重定向。curl 或 Postman 发 http://localhost:5000/api/values 会卡在 307,接口“看似不通”。
- 最省事:创建时就加
--no-https:dotnet new webapi --no-https -n MyApi - 已生成项目:删掉
app.UseHttpsRedirection()和app.UseHsts();再检查Properties/launchSettings.json里的applicationUrl,删掉 https 那条(只留 http) - 别信“上线再配 HTTPS”——开发期就配错,上线时连调试路径都理不清
控制器必须同时满足两个硬性条件
缺一不可,否则路由识别失败或模型绑定静默失效:
- 继承
ControllerBase(不是Controller),避免混入 View 相关方法 - 顶部加
[ApiController]特性,它才启用自动模型验证、绑定失败跳过、JSON 驼峰命名等 API 专用行为 - 漏掉任一条件,常见现象是 GET 能返回数据,但 POST 总是 400 且
ModelState.IsValid为 false 却查不到哪出错
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)
返回类型别用 IActionResult 或裸模型,选 ActionResult<t></t>
用错返回类型,Swagger 文档就废一半,状态码也难控制:
-
IActionResult:编译期无类型检查,Swagger 不知道成功响应长什么样 - 裸
Task<weatherforecast></weatherforecast>:只能返回 200,没法主动返回NotFound()或BadRequest() -
ActionResult<weatherforecast></weatherforecast>:既能return Ok(data),也能return NotFound(),Swagger 自动推导响应 Schema - 示例:
[HttpGet("{id}")]public ActionResult<weatherforecast> Get(int id)</weatherforecast>{ ... }
最容易被忽略的是:[ApiController] 特性不只是“让 Swagger 能用”,它还强制执行参数绑定策略。一旦加了,所有未标注来源(如 [FromQuery])的参数都会按默认规则解析,而这个规则在 POST 场景下极易和你预期冲突。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










