【问题标题】:A method was called at an unexpected time in HttpClient MultipartFormDataContent在 HttpClient MultipartFormDataContent 中意外调用了一个方法
【发布时间】:2015-04-17 06:34:47
【问题描述】:

我必须将多部分数据发布到服务器,但出现以下错误

我正在使用下面的代码

  public async static Task<string> HttpImagePostMethod(byte[] wInputData, string Uri, string path)
    {
        string result = string.Empty;
        try
        {
            #region For Https (Secure) Api having SSL
            var filter = new HttpBaseProtocolFilter();
            filter.IgnorableServerCertificateErrors.Add(Windows.Security.Cryptography.Certificates.ChainValidationResult.Untrusted);
            var client = new System.Net.Http.HttpClient(new WinRtHttpClientHandler(filter));
            #endregion

            MultipartFormDataContent requestContent = new MultipartFormDataContent();

            //   StreamContent content = new StreamContent(wInputData);
            var content = new ByteArrayContent(wInputData);
            content.Headers.ContentType = new MediaTypeHeaderValue("image/jpg");

            requestContent.Add(content, "file", path);               
            requestContent.Headers.Add("X-API-Key", UrlFactory.X_API_Key_Value);
            requestContent.Add(new StringContent("144"), "type");

            HttpResponseMessage aResp = await client.PostAsync(UrlFactory.BaseUrl + Uri, requestContent);

            if (aResp.IsSuccessStatusCode)
            {
                result = await aResp.Content.ReadAsStringAsync();
            }
            else
            {
                result = await aResp.Content.ReadAsStringAsync();
            }
        }
        catch (Exception ex)
        {
            result = string.Empty;
        }
        return result;
    }

我在这一行遇到错误

HttpResponseMessage aResp = await client.PostAsync(UrlFactory.BaseUrl + Uri, requestContent);

由于这条线

requestContent.Headers.Add("X-API-Key", UrlFactory.X_API_Key_Value);

【问题讨论】:

    标签: c# winrt-httpclient


    【解决方案1】:

    我自己回答这个问题可能对我的其他朋友有帮助...

      HttpRequestMessage httpRequest = new HttpRequestMessage();
                httpRequest.Method = HttpMethod.Post;
                httpRequest.RequestUri = new System.Uri(UrlFactory.BaseUrl + Uri);
                httpRequest.Content = requestContent;
    
                httpRequest.Headers.TryAddWithoutValidation("Content-Type", "application/x-www-form-urlencoded");
                httpRequest.Headers.TryAddWithoutValidation("X-API-Key", UrlFactory.X_API_Key_Value);
    

    Client(HttpClient) 不应包含任何标头,我们在 HttpRequestMessage 中声明标头

    【讨论】:

      【解决方案2】:

      正如错误消息所说,您正在尝试在内容上设置标题,但它不属于那里;您的 API 令牌是请求本身的属性,而不是其内容的属性。
      请尝试将该标头添加到 client.DefaultRequestHeaders

      【讨论】:

      • 感谢 Solal,如果我这样设置标题,则会出现错误:值不在预期范围内。
      猜你喜欢
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多