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

Postman请求正常但Angular12调用.Net Core 3.1 WebAPI失败如何解决

Postman与Angular发送请求的核心差异

  • 跨域规则限制不同:Postman是桌面客户端工具,不受浏览器同源策略约束,只要接口网络可达就能正常返回结果;Angular代码运行在浏览器环境中,当页面的协议、域名、端口与接口地址三者任一不匹配时,会触发跨域校验,浏览器会自动发送OPTIONS预检请求,若后端未配置跨域放行规则,请求会被直接拦截,最终返回结果为空。
  • 默认请求配置不同:Postman发送GET请求时默认Accept头为*/*,可兼容任意返回格式;Angular HttpClient默认将响应按JSON格式解析,若接口返回纯文本会触发解析异常,导致结果为undefined。
  • 身份凭证携带规则不同:如果你的.NET Core接口集成了AD身份校验,Postman会默认携带当前Windows系统的用户凭证发起请求,而Angular HttpClient默认不会携带Cookie、身份凭证等敏感信息,需要手动配置才会发送。

问题修复方案

你不需要额外添加自定义请求头,按以下步骤排查修复即可:

  1. 首先打开浏览器F12控制台的「网络」面板,复现请求查看具体报错:
    • 若为CORS跨域报错:在.NET Core 3.1的Startup.cs中添加跨域配置:
// ConfigureServices 方法中添加
services.AddCors(options =>
{
    options.AddPolicy("AllowAngularDev", builder =>
    {
        builder.WithOrigins("http://localhost:4200") // 替换为你的Angular前端访问地址
               .AllowAnyMethod()
               .AllowAnyHeader()
               .AllowCredentials(); // 若需要携带身份凭证则添加此行
    });
});

// Configure 方法中,UseRouting与UseEndpoints之间添加
app.UseCors("AllowAngularDev");
  • 若为401/403权限报错:在Angular请求中开启凭证携带配置
  1. 修正Angular请求代码,显式指定响应类型为文本,同时添加错误回调方便定位问题:
getFullName() {
  this.http.get('https://localhost:44316/api/ADInfo/maid.sabanovic@gws.ms', {
    responseType: 'text',
    withCredentials: true // 接口需要身份校验时添加此行
  }).subscribe(response => {
    this.fullName = response;
    console.log(this.fullName);
  }, error => {
    console.error('请求异常详情:', error);
  });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:06:07