【问题标题】:Angular POST request response is null (yet server returns correct string)Angular POST 请求响应为空(但服务器返回正确的字符串)
【发布时间】:2020-11-19 22:19:55
【问题描述】:

问题很简单:我正在发出一个请求,就像我迄今为止一直在做的那样,从我的客户端(角度)到我的 .net API (3.1)。正确请求 API 并正确发送了答案。但是,当它到达我的客户端时,响应为空。怎么样?

服务器端:

    [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 api rest


    【解决方案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 */ };
    

    【讨论】:

    • 感谢您的提示!不幸的是,事实并非如此。客户端返回的 res 响应从一开始就为 null .. 尽管它被正确地发回了。我尝试了您的建议,但无济于事...
    • @Diveye:你如何确认它被正确发回了?
    • 我在 return 语句上有一个断点。现在一切都好!感谢您的帮助!
    【解决方案2】:

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

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

    多田。上帝。

    【讨论】:

      猜你喜欢
      • 2014-11-30
      • 2019-12-30
      • 2020-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-19
      • 2022-01-10
      • 1970-01-01
      相关资源
      最近更新 更多