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

.NET Core 6接收Angular 12 POST请求时模型属性全为null排查

.NET Core 6 接口接收Angular请求参数全为null问题排查

问题表现

  • 项目基于.NET Core 6 + Angular 12开发,已完成登录控制器、对应请求模型编写
  • Swagger、Postman调用登录接口时,后端可正常接收参数、返回正确结果
  • Angular应用发起同接口POST请求时,后端接收到的请求模型所有属性值均为null

相关代码片段

后端请求模型

public class AuthRequest
{
    public string Username {get; set;}
    public string Password { get; set; }
}

后端登录控制器

[AllowAnonymous]
[Route("api/auth")]
public class AuthController : ControllerBase
{
    private readonly iAuthService _authService;

    public AuthController(iAuthService authService)
    {
        _authService = loginService;
    }

    [HttpPost]
    public async Task<IActionResult> Auth(AuthRequest request)
    {
        var response = await _authService.LoginAsync(request);
        return Ok(response);
    }
}

Angular端请求服务代码

login(payload: AuthModel): Observable<any> {
    //payload = { Username: 'someusername', Password: 'somePassword' }
    return this.httpClient.post(`${this.baseUrl}/auth`, payload);
 }

根本原因

.NET Core 6 的接口参数绑定默认规则下,未标注来源的复杂类型参数会优先尝试从表单格式(application/x-www-form-urlencoded)的请求中取值,而Angular内置HttpClient发送POST请求时,默认的Content-Type为application/json,请求体为JSON序列化格式。后端未按JSON格式解析请求体,就会出现所有属性绑定失败、值为null的情况。
Postman、Swagger调用时会自动匹配后端默认的参数绑定格式,因此可以正常传参。

修复方案

两种方案选择其一即可,优先推荐后端修改方案:

  • 方案1:后端显式指定参数来源(推荐)
    给Action的入参添加[FromBody]特性,显式声明从请求体中解析JSON格式内容绑定模型,修改后的接口代码如下:

    [HttpPost]
    public async Task<IActionResult> Auth([FromBody] AuthRequest request)
    {
        var response = await _authService.LoginAsync(request);
        return Ok(response);
    }
    

    该方案符合前后端分离架构下JSON传参的通用约定,后续接口扩展复杂参数时兼容性更好。

  • 方案2:前端修改传参格式匹配后端默认规则
    调整Angular请求的传参格式为表单编码格式,手动设置对应请求头,示例代码如下:

    login(payload: AuthModel): Observable<any> {
        const formParams = new URLSearchParams();
        formParams.set('Username', payload.Username);
        formParams.set('Password', payload.Password);
        return this.httpClient.post(`${this.baseUrl}/auth`, formParams.toString(), {
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded'
            }
        });
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:39:20