Я пробовал несколько разных способов, которыми я не могу заставить pipeId публиковать (получать 400), см. код ниже:
{
client.BaseAddress = new Uri(_serviceConfig.DataGapsBaseUrl);
var request = new HttpRequestMessage(HttpMethod.Post, "/piper/jobs");
var jsonContent = new StringContent(JsonConvert.SerializeObject(new
{
pipelineId = _serviceConfig.DataPipelineId
}), Encoding.UTF8, "application/json");
request.Content = jsonContent;
var token = await GetToken();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.ToString());
var result = await client.SendAsync(request);
var json = JsonConvert.DeserializeObject<JToken>(result.Content.ReadAsStringAsync().Result);
var jobId = json["id"].ToString();
return jobId;
}
}
Когда я использую Postman те же действия, что и выше, я получаю статус 200 и результаты:
поскольку вы используете асинхронное ожидание, используйте его везде, и этот синтаксис более распространен.
using HttpClient client = new HttpClient { BaseAddress = new Uri(baseUri) };
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.ToString());
var jsonContent = new StringContent(JsonConvert.SerializeObject(new
{
pipelineId = _serviceConfig.DataPipelineId
}), Encoding.UTF8, "application/json");
var response = await client.PostAsync(uri, jsonContent);
var json = await response.Content.ReadAsStringAsync();
var jObj = JObject.Parse(json);
var createTime = (string) jObj["createTime"]; //I can't see Id in Postman
Запрос.Содержимое = jsonContent; // значение, установленное в jsonContent, не приходит
В основном, тело сообщения туда не попадает
"{\"status\":400,\"message\":\"BAD_REQUEST\",\"details\":[\"GDP400000: запрос недействителен или не может быть обслужен иным образом.\"]}"
{Метод: POST, RequestUri: 'dataopspoc.ops.afsaousc.us:6055/piper/jobs', версия: 1.1, содержимое: System.Net.Http.StringContent, заголовки: { Авторизация: Bearer eyMi0yM2RhZjk0MjgY2x1c3RlciIsInZpZXctcGlwZWx pbmUiLCJlZGl0LXRlbXBsYXRlIiwiZGF Запрос -Context: appId=cid-v1:08afd478-a5bc-46b5-91cb-7afaf94e6679 Идентификатор запроса: |a746c32fcd6a1f20429f2e84170a8fcf.63f53df6cb3ea999. traceparent: 00-a746c32fcd6a1f20429f2e84170a8fcf-63f53df6cb3ea999-00 Content-Type: application/json; charset=utf-8 Длина содержимого: 53 }}
@Chaka Код, который я разместил, использовался сотни раз и никогда не подводил. Вам лучше использовать отладчик, чтобы проверить значение _serviceConfig.DataPipelineId и опубликовать код действия piper/jobs, если это возможно.
Вы дали мне хороший код. JSON, который я передал, был неверным. Еще раз спасибо за помощь.
Для начинающих:
var jsonContent = new StringContent(JsonConvert.SerializeObject(new
{
pipelineId = _serviceConfig.DataPipelineId
}), Encoding.UTF8, "application/json");
Измените следующее, используя await aswell, чтобы предотвратить блокировку потока
var json = JsonConvert.DeserializeObject<JToken>(await result.Content.ReadAsStringAsync());
Обратите внимание, что если ваш клиент является одноэлементным, и вы устанавливаете аутентификацию из асинхронного контекста, он может быть перезаписан другим вызовом, либо заново создать клиент, либо, возможно, установить авторизацию в HttpRequestMessage:
var request = new HttpRequestMessage(HttpMethod.Post, "/piper/jobs");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token.ToString()
"{\"status\":400,\"message\":\"BAD_REQUEST\",\"details\":[\"GDP400000: запрос недействителен или не может быть обслужен иным образом.\"]}"
{Метод: POST, RequestUri: 'dataopspoc.ops.afsaousc.us:6055/piper/jobs', версия: 1.1, содержимое: System.Net.Http.StringContent, заголовки: { Авторизация: Bearer eyJraWQiOiIxNDA2ZGQ3MC0zOWQ4LTRjOGItYjI1Mi0yM2Rh Zjk0Mjg0NTMiLCJhbGciOiJSUzI1NiJ9 .eyJzdWIiOiJjZGlzcG9, sbGluZ3N2YyIsImF1ZCI, 6ImRhdGFvcHNzdWl0ZS1, jbGktY2xpZW50IiwidXN, lci1hdXRob3JpdGllcyI, 6WyJ2aWV3LX RlbXBsYXRlIiwiZWRpdC1waXBlbGlb3ea999-00 Content-Type: application/json; charset=utf-8 Длина содержимого: 53 }}
Извините, ребята, моя вина, мне нужно отправить это:
{"pipelineId":"zxxzxzxzxz18","входы":{"Batch_Id":9999}}
Нужно было выяснить, как передать двойные кавычки, и это решило проблему.
Результат возвращается нулевым и получает статус 400. Проблема выше этого блока кода.