Android 및 iOS 모바일 플랫폼을 지원하는 Xamrin 기본 공유 프로젝트를 만들었습니다. 두 모바일 앱에서 모두 REST 서비스를 사용하고 싶습니다. HttpClient를 사용하여 REST API에 요청하면 작동하지 않습니다.Xamarin 기본 공유 프로젝트 HttpClient가 작동하지 않습니다.
{상태 코드 : 404, ReasonPhrase '찾을 수 없음', 버전 : 1.1, 내용 : System.Net.Http.StreamContent, 헤더 : 나에게로 응답을 제공합니다 {달라집니다 수락 인코딩을 서버 : DPS /1.0.3 X-SiteId : 1000 설정 쿠키 : dps_site_id = 1000; 경로 =/ 날짜 : 2016 년 7 월 27 일 수요일 12:09:00 GMT 연결 : 연결 유지 콘텐츠 유형 : text/html; charset = utf-8 Content-Length : 964}} 내용 : {System.Net.Http.StreamContent} 헤더 : { Accept-Encoding Server : DPS/1.0.3 X-SiteId : 1000 집합 쿠키 : dps_site_id = 1000; 경로 :/날짜 : Wed, 27 Jul 2016 12:09:00 GMT 연결 : 연결 유지 IsSuccessStatusCode : false ReasonPhrase : "찾을 수 없음"StatusCode : System.Net.HttpStatusCode.NotFound 버전 : {1.1} 공개 멤버 :
HttpWebResponse를 사용하여 요청할 경우 데이터를 성공적으로 가져옵니다.
왜 HttpClient가 작동하지 않는지 알려주실 수 있습니까?
// Using HttpClient
public async Task<string> GetCategories11(string token)
{
using (HttpClient client = new HttpClient())
{
var url = string.Format("{0}{1}", BaseUrl, CategoriesEndPoint);
var uri = new Uri(url);
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
try
{
using (var response = await client.GetAsync(uri))
{
if (response.IsSuccessStatusCode)
{
var contentStr = await response.Content.ReadAsStringAsync();
return contentStr;
}
else
return null;
}
}
catch
{
return null;
}
}
}
// Using HttpWebRequest
public async Task<ResponseModel> GetCategories(string token)
{
// Create an HTTP web request using the URL:
var url = string.Format("{0}{1}", RequestClient.BaseUrl, CategoriesEndPoint);
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(url));
request.ContentType = "application/json";
request.Headers.Add("Authorization", "Bearer " + token);
request.Accept = "application/json";
request.Method = "GET";
try
{
// Send the request to the server and wait for the response:
using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync())
{
// Get a stream representation of the HTTP web response.
using (Stream stream = response.GetResponseStream())
{
// Use this stream to build a JSON object.
JsonValue jsonDoc = await Task.Run(() => JsonObject.Load(stream));
return new ResponseModel() { Success = true, ResponseValue = jsonDoc.ToString(), StatusCode = response.StatusCode };
}
}
}
catch (WebException ex)
{
using (var stream = ex.Response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
return new ResponseModel() { ResponseValue = reader.ReadToEnd(), StatusCode = ((HttpWebResponse)ex.Response).StatusCode };
}
}
catch (Exception ex)
{
return new ResponseModel() { ResponseValue = ex.Message };
}
}
** @ GoNeale, ** ** 디버그를 통해 내가 아래 내 질문에 추가됩니다 얻을 응답은 ** 일시 : 이미 '나에게로 응답을 제공합니다'. ** uri 란 무엇입니까? GetCategories()와 동일합니까? ** in * HttpClient 메서드 var uri = new Uri (url); 사용에 * 을 (VAR 응답 = client.GetAsync (URI)를 기다리고) *의 HttpWebRequest 방법 HttpWebRequest를 요청 = (HttpWebRequest를) HttpWebRequest.Create (새 열린 (URL)) * 모두 동일하다. – user2618875
** @ GoNeale, ** uri를 전달하는 대신 URL을 직접 전달하면 응답이 동일합니다. 그러나 코드 스 니펫을 사용해 보겠습니다. – user2618875