反序列化HttpResponseMessage

时间:2020-11-04 16:40:20

标签: c# asp.net-core asp.net-web-api blazor blazor-webassembly

我有一个API(asp net core 3.1)和一个Web应用程序(asp net Blazor WebAssembly)。 在我的API中,我有一个CustomerController,它具有以下用于POST的方法:

import java.util.*;

public class GroupAnagramsTogether {
    public static void main(String[] args)
 {
        String [] input = new String [] {"bad", "app", "sad", "mad", "dab","pge", "bda", "ppa", "das", "dba"};
        System.out.println("Input: " + Arrays.toString(input));

        List<List<String>> result = groupAnagram(input);
        System.out.println(result);
    }

    private static List<List<String>> groupAnagram(String[] input) 
{
        List<List<String>> list = new ArrayList<List<String>>();
        
        HashMap<String, List<String>> mp = new HashMap<String, List<String>>();
        
        for(String s : input)
        {
            char[] ch = s.toCharArray();
            Arrays.sort(ch);
            
            String key = new String(ch);
            if(mp.containsKey(key))
            {
                mp.get(key).add(s);
            }
            else
            {
                List<String> strList = new ArrayList<String>();
                strList.add(s);
                mp.put(key,strList);
            }
        }
        list.addAll(mp.values());
        return list;
    }

}

在我的Web应用程序中,我有DataServiceHelper类,该类在该Web应用程序的实际数据服务中使用。这里我有POST和GET的方法,等等:

    [HttpPost]
    public async
        Task<ActionResult>
        CreateOrderAsync(OrderDto orderDto)
    {
        orderDto.IdOrder =
            await repository
            .CreateOrderAsync(mapper.Map<Order>(orderDto));
        return CreatedAtRoute(nameof(GetOrderByIdAsync),
            new { idOrder = orderDto.IdOrder }, orderDto);
    }

如果我将POST请求发送到API(例如通过Postman),则响应包含(其中包括)主体,这是我的数据库对象的JSON版本。我可以使用JsonSerializer在Web应用程序中以某种方式捕获该正文并将其返回,就像使用FindOneByIdAsync方法一样吗? 或者,可以在API中,是否可以在响应标头中创建一个仅包含数据库为新对象创建的Id的新标头,然后从响应中将其捕获到我的Web应用程序post方法中?

1 个答案:

答案 0 :(得分:0)

可能有点笨拙,但这可行:

static public async Task<T>PostAndListenAsync(HttpClient httpClient, string endpoint, T item)
{            
    var content = await httpClient.PostAsJsonAsync(endpoint, item);
    var stream = await content.Content.ReadAsStreamAsync();
    T t = await JsonSerializer.DeserializeAsync<T>(stream, new JsonSerializerOptions() { PropertyNameCaseInsensitive = true });
    return t;
}

随时用它制成整洁的单线纸。

我的数据服务:

public async Task<OrderDto> PostOrderAsync(OrderDto orderDto)
{
    return await DataServiceHelper<OrderDto>.PostAndListenAsync(httpClient, "/Orders", orderDto);
}

在剃须刀中:

...
private async Task CreateNewOrder()
{
        OrderDto orderDto = await dataService.PostOrderAsync(newOrder);
}
...