代理调用远程 json 以避免 CORS 问题

tal*_*999 5 c# json cors asp.net-core asp.net-core-webapi

我开发了一个 Angular 应用程序,需要使用来自远程服务器的 json 数据。由于 CORS 问题,应用程序无法直接从该服务器获取数据。我的解决方案是开发一个“代理”Web API 来读取该 json 并将其返回到我的应用程序。目前,这就是我正在做的方式:

public async Task<IActionResult> MyJson()
{
    const string jsonUrl = "url-of-remote-json";
    using (var client = new HttpClient())
    {
        using (var result = await client.GetAsync(jsonUrl))
        {
            if (result.IsSuccessStatusCode)
            {
                return new ObjectResult(JsonConvert.DeserializeObject(await result.Content.ReadAsStringAsync()));
            }
        }
    }

    return new ObjectResult(new { });
}
Run Code Online (Sandbox Code Playgroud)

但是,我相信这远远不是一种有效的方法,因为我必须将 json 作为字符串读取,然后使用 JsonConvert 包将其转换为对象以提供 Web api 方法。因此,性能并不是很好。

我想知道是否有更简单/有效/更简单的方法来完成这项任务?

Ale*_*hev 4

只需传递来自远程服务器的响应即可。查看编辑后的示例。

public async Task MyJson()//void if not async
{
    string jsonUrl = "url-to-json";
    HttpContext.Response.ContentType = "application/json";
    using (var client = new System.Net.WebClient())
    {
        try
        {
            byte[] bytes = await client.DownloadDataTaskAsync(jsonUrl);
            //write to response stream aka Response.Body
            await HttpContext.Response.Body.WriteAsync(bytes, 0, bytes.Length);
        }
        catch (Exception e)//404 or anything
        {
            HttpContext.Response.StatusCode = 400;//BadRequest
        }
        await HttpContext.Response.Body.FlushAsync();
        HttpContext.Response.Body.Close();
    }
}
Run Code Online (Sandbox Code Playgroud)

按预期工作。