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

调用带模型参数的.NET Core API遇415错误,请求技术支持

问题:调用.NET Core API时收到415不支持的媒体类型错误

尝试从.NET Core API获取产品列表,但持续返回415错误,相关代码如下:

前端代码

service.ts

getProductList(listObj:any) {
    return this.http.get<any>(`${this.baseUrl}GetFilteredList`,listObj);
}

component.ts

products:any= [];

ngOnInit() {
    this.api.getProductList(this.products).subscribe({
      next:(res)=>{
        if(res.status){
          this.products = res.record;
        }
      }
    })

component.html

<ul *ngFor="let product of products">
    <li> {{product.subCategoryID}} </li>
    <li> {{product.categoryID}} </li>
    <li> {{product.price}} </li>
    <li> {{product.country}} </li>
</ul>

后端API定义

接口方法

public ResultModel ProductList(ProductModel model) {

ProductModel示例

{
    "subCategoryID": 0,
    "categoryID": 0,
    "key 3" : ""
}

API返回结构

{
    "status": true,
    "record": [
        {
            "key1": 0,
            "key 2": 62,
            "key 3" : "string val"
        },
        {
            "categoryID": 0,
            "saleListingID": 61,
            "key 3" : "string val"
        }
    ]
}

错误原因

  1. GET请求参数传递错误:Angular的HttpClient.get第二个参数是配置项,不是请求体。你直接传listObj不会被当作参数发送给后端。
  2. 后端参数读取方式不匹配:.NET Core默认会从请求体读取ProductModel参数,但GET请求通常不包含请求体,后端无法解析参数,导致415错误。

解决方案

方案1:改用POST请求(推荐,适合复杂对象)

复杂筛选参数用POST传递更合理,避免查询字符串长度限制和拼接麻烦。

前端修改(service.ts)

getProductList(listObj:any) {
    // 用post方法传递请求体
    return this.http.post<any>(`${this.baseUrl}GetFilteredList`, listObj);
}

后端修改

添加[HttpPost]特性,指定从请求体读取参数:

[HttpPost("GetFilteredList")]
public ResultModel ProductList([FromBody] ProductModel model) {
    // 业务逻辑代码
}

方案2:继续使用GET请求(适合简单参数)

如果必须用GET,需将对象参数转为查询字符串传递。

前端修改(service.ts)

import { HttpParams } from '@angular/common/http';

getProductList(listObj:any) {
    let params = new HttpParams();
    // 遍历对象属性,转为查询参数
    Object.keys(listObj).forEach(key => {
        if (listObj[key] != null && listObj[key] != undefined) {
            params = params.append(key, listObj[key].toString());
        }
    });
    
    return this.http.get<any>(`${this.baseUrl}GetFilteredList`, { params });
}

后端修改

添加[HttpGet]和[FromQuery]特性,从查询字符串读取参数:

[HttpGet("GetFilteredList")]
public ResultModel ProductList([FromQuery] ProductModel model) {
    // 业务逻辑代码
}

注意事项

  • 确保前后端模型的属性名完全一致(.NET Core默认区分大小写,可配置忽略大小写)。
  • POST请求无需额外设置Content-Type,Angular的HttpClient.post默认会使用application/json。
  • 可先用Postman测试后端接口,确认接口正常后再调试前端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:22:55