首页 > 解决方案 > 如何使用 C# 代码为 API 传递标头和正文信息

问题描述

我将使用 put 方法从 C# 代码生成电子发票。我已经使用邮递员工具在沙箱环境中测试了电子发票 api。它按照我们的要求工作正常。我想知道如何传递 API 标头信息和正文来自 C# 代码的信息

Header :-

Content-Type : application/json
owner_id: zxererer45454545_4545456
gstin : 29AAFCD5862R000

Body :-
[
  {
    "transaction": {
      "Version": "1.03",
      "TranDtls": {
        "TaxSch": "GST",
        "SupTyp": "B2B",
        "RegRev": "Y",
        "EcmGstin": null,
        "IgstOnIntra": "N"
      },
      "DocDtls": {
        "Typ": "INV",
        "No": "AS/20/0009",
        "Dt": "08/09/2020"
      },
      "SellerDtls": {
        "Gstin": "29AAFCD5862R000",
        "LglNm": "K.H Exports India Private Limited",
        "TrdNm": "K.H Exports India Private Limited",
        "Addr1": "142/1,Trunk Road",
        "Addr2": "142/1,Trunk Road",
        "Loc": "Perumugai",
        "Pin": "560037",
        "Stcd": "29",
        "Ph": "04162253164",
        "Em": "edp.kharind@khindia.com"
      },
]

使用以下代码时收到错误消息,请查看随附的屏幕截图

截图错误信息

标签: c#api

解决方案


您可以使用 HttpClient 向 C# 中的 API 发出请求。下面是一个示例代码

public async Task<TResponse> SendPutRequestAsync<TRequest, TResponse>(TRequest data, string url, string accessToken = null)
        {
var httpClient = new HttpClient
{
BaseAddress = "BaseAddress of your API"
};

            if (!string.IsNullOrWhiteSpace(accessToken))
                httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

                httpClient.DefaultRequestHeaders.Add("HeaderKey", "HeaderValue");

            var response = await httpClient.PutAsJsonAsync(url, data);

            if (response.IsSuccessStatusCode)
                return JsonConvert.DeserializeObject<TResponse>(await response.Content.ReadAsStringAsync());
            else
                throw new HttpRequestException(response.ReasonPhrase);
}

这是请求正文中的扩展添加数据。

 public static class HttpClientExtensions
    {

        public static Task<HttpResponseMessage> PutAsJsonAsync<T>(this HttpClient httpClient, string url, T data)
        {
            var dataAsString = JsonConvert.SerializeObject(data);
            var content = new StringContent(dataAsString);
            content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

            return httpClient.PutAsync(url, content);
        }
}

推荐阅读