代码之家  ›  专栏  ›  技术社区  ›  Sam

带httpclient的简单日志

  •  3
  • Sam  · 技术社区  · 6 年前

    我有两个ASP.NET核心2.1应用程序,我正在尝试使 POST 使用从一个应用程序呼叫另一个应用程序 HttpClient .

    因为某种原因,当我使用 [FromBody] 为了得到我正在尝试接收的简单文本,我得到一个 BadRequest 错误。

    这是我发件人的密码。首先,这是我的 ConfigureServices 方法。我用的是新的 HttpClientFactory ASP.NET核心2.1中的功能。我还创建了一个名为 myApiCallerClient 它处理我的API调用:

    services.AddHttpClient("myNamedClient", client =>
    {
        client.BaseAddress = new Uri("http://localhost:50625/api/");
        client.DefaultRequestHeaders.Clear();
        client.DefaultRequestHeaders.Add("Accept", "application/json");
    });
    
    services.AddScoped(x => {
       var httpClientFactory = x.GetRequiredService<System.Net.Http.IHttpClientFactory>();
       var myApiCallerClient = httpClientFactory.CreateClient("myNamedClient");
       return new Clients.ApiCaller.ApiCallerClient(myApiCallerClient);
    });
    

    下面是myapicallerclient中的代码:

    public async Task SayHello()
    {
         var response = await _httpClient.PostAsync("test", new StringContent("Saying hello!", System.Text.Encoding.UTF8, "text/plain"));
    }
    

    这是我在接收端的代码 POST() API方法 TestController :

    [HttpPost]
    public async Task Post([FromBody]string input)
    {
        // Some logic
    }
    

    如果我使用 [来自身体] 我得到 恶意请求 发件人出错。如果我使用 [FromHeader] 我的请求点击了这个API方法,但是我得到了一个 null 价值。

    我在这里做错什么了?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Kirk Larkin    6 年前

    ASP.NET核心不支持 Content-Type 属于 text/plain 开箱即用,因此服务器拒绝您的请求,因为它不是使用 [FromBody] 属性。

    在评论中,你说:

    最终我不会发短信。我主要关心的是我没有使用API方法。一旦我确认一切正常,我将发送JSON数据,这些数据将在接收端进行反序列化。

    为了测试问题是否由 文本/平原 内容类型 ,您可以更新 PostAsync 这样的行:

    var response = await _httpClient.PostAsync(
        "test",
        new StringContent("\"Saying hello!\"", System.Text.Encoding.UTF8, "application/json"));
    

    AS application/json 受支撑的 内容类型 默认情况下,上面的代码使用该值并包装发送时使用的值 " 为了使它成为有效的JSON值。

    推荐文章