#c# #xamarin #asp.net-web-api2
#c# #xamarin #asp.net-web-api2
Вопрос:
У меня есть api, который я могу вызвать с помощью этой cURL
команды:
C:WindowsSystem32curl.exe -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Authorization: Bearer X.Y.Z -d '{
>> "Filter": {
>> "ShowRent": true,
>> "ShowSale": true,
>> "ShowApartment": true,
>> "ShowOffice": true,
>> },
>> "PageSize": 1,
>> "PageNumber": 1
>> }' http://localhost:port_number/path_to_api
этот запрос успешно завершен.
Предполагается, что api возвращает a List<ResultDto>
.
Я хочу создать тот же запрос в проекте Xamarin.
Вот что я пробовал:
var a = new
{
PageSize = 5,
PageNumber = 1,
Filter = new
{
ShowRent = true,
ShowSale = true,
ShowApartment = true,
ShowOffice = true
}
};
var json = JsonConvert.SerializeObject(a);
var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Bearer",
my_access_token);
var rawResponse = await client.PostAsync(
"http://localhost:port_number/path_to_api",
stringContent
);
List<RealtorEstateMarkerDto> result=
JsonConvert.DeserializeObject<List<ResultDto>>(
await rawResponse.Content.ReadAsStringAsync());
когда выполняется мой код xamarin, System.OperationCanceledException
на сервере возникает исключение.
Вот трассировка стека исключения:
at System.Threading.CancellationToken.ThrowOperationCanceledException()
at System.Threading.CancellationToken.ThrowIfCancellationRequested()
at Microsoft.Owin.IOwinContextExtensions.GetDependencyResolver(IOwinContext context)
Комментарии:
1. Небольшое отличие, которое я вижу, заключается в том, что в Xamarin вы не устанавливаете заголовок Accept
2. Вам нужно просмотреть все исключение / трассировку стека, поскольку, скорее всего, основная причина будет внутри внутреннего исключения, которое вы не показали.
3. вам также необходимо убедиться, что ваш сервер доступен с устройства / эмулятора. адреса «localhost» являются проблематичными, и обычно вместо этого следует использовать IP-адрес сервера или полное доменное имя