Angular POST 请求响应为空(但服务器返回正确的字符串)

问题描述 投票:0回答:2

问题相当简单:我正在向我的客户端(角度)向我的 .net API (3.1) 发出请求,就像我一直以来所做的那样。 API 已正确请求,并且答案已正确发送。但是,当它到达我的客户端时,响应为 null。怎么样?

服务器端:

[HttpPost]
[Route("api/XXXXXXXX")]
[RequestSizeLimit(4_000_000_000)]
[Microsoft.AspNetCore.Cors.EnableCors]
public string JsonFilterResponse([FromBody] JsonElement jsonresult)
{
    try
    {
        var json = System.Text.Json.JsonSerializer.Serialize(jsonresult);
        if (json != null)
        {
            var savepath = ".//JsonResponses//"; Random rnd = new Random();
            var id = rnd.Next().ToString();
            var filePath = Path.Combine(savepath, id); 

            System.IO.File.WriteAllText(filePath, json);

            // return job complete

            Response.Body.Flush(); // http response
            Ok();
            return id; // server response --> the id of the file created
        }
        else
        {
            NotFound();
            return null;
        }

    }
    catch (Exception)
    {
        StatusCode(500, "Internal server error");
        return null;
    }
}

客户端:

public uploadjsonresponse(file, apiname, filename, end, appcomponent, secondapiname) {

    let headers = new HttpHeaders({
      'Content-Type': 'application/json',
      'Access-Control-Allow-Origin': '*',
    });

    return this.httpClient.post(this.SERVER_URL + apiname, file, {headers: headers}).pipe(map(res => 
  {

      appcomponent.filemapper.push(filename + ";;;" + res);
      console.log(appcomponent.filemapper[appcomponent.filemapper.length-1]);
      if (end) // callback
        appcomponent.requestmapping(secondapiname, end, this);
    }));  
  }

问题是“res”返回空客户端。然而,服务器正确地返回了它(返回 id)。关于为什么会这样的任何想法吗?

.net angular typescript rest
2个回答
1
投票

当您将箭头函数括在大括号中时,应明确声明

return
关键字。因此,您可以将
return
附加到您希望从
map
返回的语句中。

尝试以下方法

return this.httpClient.post(this.SERVER_URL + apiname, file, { headers: headers }).pipe(map(res => {
  let result = '';     // <-- change it to your desired value
  
  appcomponent.filemapper.push(filename + ";;;" + res);
  console.log(appcomponent.filemapper[appcomponent.filemapper.length - 1]);
  if (end) {       // callback
    result = appcomponent.requestmapping(secondapiname, end, this);
  }

  return result;        // <-- return result here
}));

说到箭头函数

const convert = (value) => /* convert and return */;

相同
const convert = (value) => { return /* convert */ };

0
投票

我是个白痴...只需在 .net API 中删除它:

Response.Body.Flush(); // http response

多田。天啊。

© www.soinside.com 2019 - 2024. All rights reserved.