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

Angular2组件无法显示ServiceStack API返回的HTTP GET响应内容

Hey there, let's troubleshoot why your category names aren't showing up even though the API is returning a 200 with valid data! Here are the most likely issues and fixes:

1. Mismatched Property Case (Most Common)

ServiceStack defaults to PascalCase when serializing .NET objects (e.g., Id, Name), but your Angular CategoryDTO uses camelCase (id, name). When you map the API response to your DTO, the property names don't match—so category.name ends up being undefined, leaving your list items empty except for the bullet points.

Fix Options:

  • Option 1: Align Angular DTO with ServiceStack's casing
    Update your Category.ts to use PascalCase:

    export class CategoryDTO {
      Id: string;
      Name: string;
    }
    

    Then adjust your template to match:

    <span>{{category.Name}}</span>
    
  • Option 2: Configure ServiceStack to return camelCase JSON
    In your ServiceStack AppHost setup, add this config to make the API output camelCase fields that match your Angular DTO:

    SetConfig(new HostConfig {
        UseCamelCase = true
    });
    

2. ServiceStack Response is Wrapped in an Object

Sometimes ServiceStack wraps collection responses in an object with a Results property (e.g., {"Results": [{"Id": "1", "Name": "Apparel"}, ...]}). If you're directly casting the full JSON response to CategoryDTO[], you're actually trying to iterate over an object instead of an array—hence empty list items.

Fix:

Check your API's raw response in the browser's Network tab. If it's wrapped, adjust the map operator to extract the array:

.map((response: Response) => <CategoryDTO[]> response.json().Results);

Quick Debugging Tips

Add a console log in your subscription to inspect the incoming data structure—this will instantly tell you if the issue is casing or response wrapping:

.subscribe((categoriesReturned) => {
  console.log('Received categories:', categoriesReturned);
  this.categoriesToDisplay = categoriesReturned;
}, err => console.log('err = ' + JSON.stringify(err, null, 2)));

Also, initialize your array to avoid early ngFor errors:

categoriesToDisplay: CategoryDTO[] = [];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:07:29