首页 > 解决方案 > 如何在 C# 中对 BamBhooHr Api 发出 POST 请求

问题描述

我想在 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#apipostmodel-view-controllercontent-type

解决方案


在这种情况下,这个 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);

推荐阅读