【问题标题】:How to make POST request on BamBhooHr Api in C#如何在 C# 中对 BamBhooHr Api 发出 POST 请求
【发布时间】:2019-10-15 00:20:37
【问题描述】:

我想在 MVC C# 中使用 Bambhoohr REST API 在 BamBhooHr 上添加员工。

我已经尝试过 2 种内容类型来发布,如代码所示,但没有成功。

1==>

public async System.Threading.Tasks.Task<JsonResult> AddEmployee(string fn,string ln)
  {
         var _resultModel = new BBHEmployee();
         var _bambhoohrApi = "https://epicsoftsandbox.bamboohr.com/api/gateway.php/epicsoftsandbox/v1/employees";
         var _apiKey = "b2aef724a48603468bfe85dce9e417ac8cf15fdf";          
         var _url = $"{_bambhoohrApi}";

         var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(_apiKey + ":x");
         var base64encodedData = System.Convert.ToBase64String(plainTextBytes);

            using (var _client = new HttpClient())
            {
                var _postData = new Dictionary<string, string>
                        {
                            { "firstName", fn },
                            { "lastName", ln }
                        };
                _client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", base64encodedData);                

var _response = await _client.PostAsync(_url, new FormUrlEncodedContent(_postData));
                var _content = await _response.Content.ReadAsStringAsync();
                _resultModel = JsonConvert.DeserializeObject<BBHEmployee>(_content);
            }
            return Json(_resultModel, JsonRequestBehavior.AllowGet);
        }

2==>

public async System.Threading.Tasks.Task<JsonResult> AddEmployee(string fn,string ln)
        {
            var _resultModel = new BBHEmployee();
            var _bambhoohrApi = "https://epicsoftsandbox.bamboohr.com/api/gateway.php/epicsoftsandbox/v1/employees";
            var _apiKey = "b2aef724a48603468bfe85dce9e417ac8cf15fdf";           
            var _url = $"{_bambhoohrApi}";

            var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(_apiKey + ":x");
            var base64encodedData = System.Convert.ToBase64String(plainTextBytes);

            using (var _client = new HttpClient())
            {
                                _client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", base64encodedData);
                _client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

                var jsonString = "{\"firstName\":\"" + fn + "\",\"lastName\":\"" + ln + "\"}";
                StringContent _contt = new StringContent(jsonString, Encoding.UTF8, "application/json");

                var _response = await _client.PostAsync(_url, _contt);
                var _content = await _response.Content.ReadAsStringAsync();
                _resultModel = JsonConvert.DeserializeObject<BBHEmployee>(_content);
            }
            return Json(_resultModel, JsonRequestBehavior.AllowGet);
        }

两种方式都返回 StatusCode 400(BadRequeest)

【问题讨论】:

    标签: c# api post model-view-controller content-type


    【解决方案1】:

    在这种情况下,这个 BambhooHr API 端点需要 XML 数据才能发布, 所以我使用它,它工作正常。

    var xmlString = "<employee><field id = \"firstName\">"+fn+"</field><field id = \"lastName\">"+ln+"</field></employee>";
    var _contt = new StringContent(xmlString,Encoding.UTF8, "text/xml");
    var _response = await _client.PostAsync(_url, _contt);
    

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      相关资源
      最近更新 更多