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

Angular调用ASP.NET Core MVC Post方法时参数接收为null的解决办法

问题:ASP.NET Core MVC Action接收前端传递的用户名始终为null

从Angular前端传递用户名到ASP.NET Core MVC的LoginUser Action时,后端参数始终接收为null,需求是通过该用户名登录第三方应用,相关代码及截图如下:

Angular前端代码

callExternalProject(username : string): Observable<any> {
      
    return this.http.post<any>(`${environment.CMRDashboardURL}/Account/LoginUser`,username) .pipe(
          catchError(error => {
              return throwError(() => new Error(error))
          })     
    );
}

ASP.NET Core MVC后端代码

[HttpPost]
public IActionResult LoginUser(string Username)
{
    string viewName = "Login";

    if (string.IsNullOrEmpty(Username))
    {
        ViewBag.Emptybox = "User name can not be empty.";
        return View(viewName, Username);
    }
}

相关截图

  • 前端请求截图:
    前端请求截图
  • 后端调试截图:
    后端调试截图

解决方案

原因

Angular的HttpClient.post直接传字符串时,请求内容为纯文本(Content-Type是text/plain),但ASP.NET Core MVC默认不会从纯文本请求体中绑定简单类型参数,需显式指定绑定规则。

修复方案

方案1:修改后端Action,指定参数从请求体绑定

给参数添加[FromBody]特性,告诉框架从请求体读取值:

[HttpPost]
public IActionResult LoginUser([FromBody] string Username)
{
    string viewName = "Login";

    if (string.IsNullOrEmpty(Username))
    {
        ViewBag.Emptybox = "User name can not be empty.";
        return View(viewName, Username);
    }
    // 后续登录逻辑
}

方案2:前端传递JSON格式数据(更推荐)

把用户名包装成JSON对象传递,适配前后端交互的常规格式,扩展性更强:

callExternalProject(username : string): Observable<any> {
    const payload = { Username: username };
    return this.http.post<any>(`${environment.CMRDashboardURL}/Account/LoginUser`, payload) .pipe(
          catchError(error => {
              return throwError(() => new Error(error))
          })     
    );
}

此时后端可创建模型类规范参数接收,代码更易维护:

public class LoginRequest
{
    public string Username { get; set; }
}

[HttpPost]
public IActionResult LoginUser([FromBody] LoginRequest request)
{
    string viewName = "Login";

    if (string.IsNullOrEmpty(request?.Username))
    {
        ViewBag.Emptybox = "User name can not be empty.";
        return View(viewName, request?.Username);
    }
    // 后续登录逻辑
}

内容的提问来源于stack exchange,提问作者Hasan Javed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:37:19