StringContent против ObjectContent
Я использую систему.Сеть.HttpClient Http для вызова REST API с помощью " POST" используя следующий код:
using (HttpRequestMessage requestMessage = new HttpRequestMessage(
HttpMethod.Post, new Uri(request)) { })
{
response = await httpClient.PostAsync(request, objectContent);
}
"objectContent" в настоящее время это -
objectContent = new ObjectContent(jsonContent.GetType(),
jsonContent,
new JsonMediaTypeFormatter());
мне было интересно, какая разница, если это был StringContent, а не ObjectContent, как это?
objectContent = new StringContent(content);
objectContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
оба работают нормально. Поскольку это JSON, я склонен предполагать, что StringContent будет иметь смысл. Но когда ObjectContent будет использоваться, потому что почти все содержимое послал-это "строка".
3 ответов
мне было интересно, какая разница, если это был StringContent а не ObjectContent такой?
в вашем примере не будет никакой разницы. ObjectContent
просто позволяет" более широкий " диапазон типов для отправки через HttpClient
, а StringContent
меньше на string
только значения, такие как JSON.
StringContent
- Это тонкая обертка вокруг ByteArrayContent
, и фактически сохраняет значение передается как byte[]
. Вы просто получаете преимущество не необходимо преобразовать ваш string
и обратно.
Edit:
учитывая тот факт, что вы публикуете JSON, вы даже можете сделать его менее подробным, используя HttpClientExtensions.PostAsJsonAsync<T>
:
await httpClient.PostAsJsonAsync(url, json);
Если кто-то будет искать, как отправить запрос PostAsync в .NET Core 2.1: Я не нашел метод PostAsJsonAsync в HttpClient, но ваше решение с настройкой:
objectContent = new StringContent(content);
objectContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
" сделать работу " отлично также в .NET Core.
Edit:
кроме того, если вы хотите добавить свой собственный заголовок, вы можете ввести:
objectContent.Headers.Add("Your header", "Value");
ObjectContent используется для форматирования более сложных типов Mime с помощью встроенных или пользовательских форматеров. Можно также использовать ObjectContent для простой строки, это не имеет большого значения, за исключением производительности, которая (IMHO и не проверена) может быть лучше с StringContent, так как она может быть оптимизирована специально для строк