Я отправляю этот объект-член из внешнего интерфейса в API, но параметр становится пустым.
Я видел другие вопросы о параметре, всегда пустом , но мой - это не всегда ноль , оно работает большую часть времени, но если я пытаюсь добавить больше (дочерних) в Member, параметр API [FromBody] становится нулевым.
Это мой HttpClient to API
private async Task<HttpResponseMessage> SendToApi<T>(HttpMethod method, string requestUrl, T responseBody, string headerXData, bool extendRequest)
{
var token = await _httpContextAccessor.GetAccessToken();
var request = GetHttpRequestForApiCall(method, requestUrl, token, responseBody, headerXData, extendRequest);
using (var cts = new System.Threading.CancellationTokenSource())
{
cts.CancelAfter(TimeSpan.FromSeconds(extendRequest ? _extendedTimeout : _timeout));
/*
var something = await request.Content.ReadAsByteArrayAsync();
var jsonStr = Newtonsoft.Json.JsonConvert.DeserializeObject<MemberDtoModel>(Encoding.UTF8.GetString(something));
works here, can deserialize to MemberDtoModel
*/
return await HttpClient.SendAsync(request, cts.Token);
}
}
РЕДАКТИРОВАНИЕ
protected HttpRequestMessage GetHttpRequestForApiCall<T>(HttpMethod method, string requestUrl, string bearerToken, T responseBody, string headerXData, bool extendRequest)
{
var request = new HttpRequestMessage(method, requestUrl);
request.Headers.Add("Ocp-Apim-Subscription-Key", ApiSubscriptionKey);
request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", bearerToken);
if (!string.IsNullOrWhiteSpace(headerXData))
{
request.Headers.Add("x-data", headerXData);
}
request.Content = CreateContent(method, responseBody);
if (extendRequest)
{
request.Headers.Add("extendRequest", "true");
}
return request;
}
private HttpContent CreateContent<T>(HttpMethod method, T responseBody)
{
if (responseBody == null)
{
return null;
}
switch (responseBody)
{
case string stringBody:
if (!string.IsNullOrWhiteSpace(stringBody))
{
return new StringContent(stringBody, Encoding.UTF8, "application/json");
}
break;
case ApiCommunicationContentModel contentBody:
if (method != HttpMethod.Get && contentBody?.Body != null)
{
var content = new ByteArrayContent(contentBody.Body);
content.Headers.ContentLength = contentBody.ContentLength;
content.Headers.Add("Content-Type", contentBody.ContentType);
return content;
}
else if (method != HttpMethod.Get && contentBody?.FileCollection != null)
{
var content = new MultipartFormDataContent(contentBody.ContentType.Split(';')[1]);
foreach (var item in contentBody.FileCollection)
{
var streamContent = new StreamContent(item.OpenReadStream());
streamContent.Headers.ContentLength = item.Length;
content.Add(streamContent, item.Name, item.FileName);
}
return content;
}
break;
default:
throw new NotImplementedException();
}
return null;
}
Это мой API
[HttpPost("Member")]
public async Task<IActionResult> SaveTemplate([FromBody] MemberDtoModel member) //here member becomes null
{
await _memberService.SaveMember(member);
return Ok(true);
}
Это из-за длины контента? Тот, у которого проблема, имеет длину содержимого 212208, но я уже установил
<requestLimits maxAllowedContentLength="55000000" />
Как его отладить? Что не так? Какими еще способами можно получить параметр MemberDtoModel в API