问题相当简单:我正在向我的客户端(角度)向我的 .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)。关于为什么会这样的任何想法吗?
当您将箭头函数括在大括号中时,应明确声明
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 */ };
我是个白痴...只需在 .net API 中删除它:
Response.Body.Flush(); // http response
多田。天啊。