簡體   English   中英

將 HTTP GET 請求的響應類型設置為通用列表(IEnumerable<t> ) 並使用 HTTP GET 在 Angular 中接收它</t>

[英]Setting the response type for a HTTP GET Request to generic list (IEnumerable<T>) and receive it in Angular using HTTP GET

我正在嘗試創建一個 HTTP GET 方法,該方法返回項目的通用列表(IENumerable<T>) ,然后我的 Angular 應用程序可以使用 Z80791B3AE7002CB88C246876D9FAA8F 讀取這些項目。

在我的 MVC 項目的 controller class 中,處理來自 angular 應用程序的調用,我有以下方法:

[HttpGet(URLs.CustomField.GetCustomFieldsForMatterAsync)]
[ProducesResponseType(typeof(IEnumerable<CustomFieldGroup>), 200)]
public async Task<IEnumerable<CustomFieldDTO>> GetCustomFieldsByFileIDAsync(int fileID)
{
    // fetches the list from DB, stores in a variable called customFields

    List<CustomFieldDTO> list = new List<CustomFieldDTO>();

    foreach (CustomField customField in customFields)
    {
       switch (customField.CustomFieldType)
       {
          case CustomFieldType.Text:
          case CustomFieldType.DateTime: list.Add(_mapper.Map<CustomFieldDTO<string>>(customField)); break;
          case CustomFieldType.Boolean: list.Add(_mapper.Map<CustomFieldDTO<bool>>(customField)); break;
          case CustomFieldType.Currency: list.Add(_mapper.Map<CustomFieldDTO<decimal>>(customField)); break;
          case CustomFieldType.List:
          case CustomFieldType.Number: list.Add(_mapper.Map<CustomFieldDTO<int>>(customField)); break;
       }
    }

    return list;
}

我需要返回 customFields 的通用列表,以便 angular 項目可以根據其類型正確處理該屬性。 我需要以某種方式將返回類型從IEnumerable<CustomField>更改為IEnumerable<CustomField<T>> 值的類型可以是:string、bool、int、dateTime。

我最接近的方法是創建一個抽象的 class 的 CustomField ,只有值。

public class CustomFieldDTO<T> : CustomFieldDTO
{
   public T Value { get; set; }
}

public abstract class CustomFieldDTO { // bunch of other variables }

通過這樣做,我至少可以創建如上所示的 GetCustomFieldsByFileIDAsync 方法。 但是 angular 應用程序在 Value 屬性中沒有顯示任何值。 如何將通用類型的項目傳遞給 angular? 我不能說: [ProducesResponseType(typeof(IEnumerable<CustomField<T>>), 200)]因為那行不通。

還嘗試將方法更改為: public async Task<IEnumerable<CustomFieldDTO<T>>> GetCustomFieldsByFileIDAsync<T>(int fileID)但是 angular 說它找不到它????

在 angular 中,我正在這樣做:

    this.http.get<CustomField<any>>(URLs.GetCustomFieldsForMatter(fileID)).subscribe(customFields => 
    {
        console.log(customFields);
    });

有什么辦法可以使這項工作?

我認為 Generics 有問題,將返回的CustomerFieldDTO<T>替換為List<object>

public async Task<IEnumerable<object>> GetCustomFieldsByFileIDAsync(int fileID)
{
    List<object> list = new List<object>();

    // More code

    return list;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM