1

GET 및 매개 변수를 사용하여 mke 요청을 시도했습니다. 그러나 WinPhone8.1에 대한 예외가 있습니다. 즉, GET은 추가 된 내용으로 인해 위반 프로토콜 이었으므로 POST 요청을 만드는 것이 해결책입니다.Xamarin Forms - HttpWebRequest의 ContentLenght를 설정할 수 없습니다.

내 검색에도 불구하고 여전히 HttpWebRequest의 콘텐츠 길이 속성을 설정할 수 없습니다. 이유가 무엇입니까?

private static async void AsyncRequest(string url, string contentType, string methodType, int contentLenght, Action<Object, string> callback, Action<HttpStatusCode, JObject, Action<Object, string>> parserFunction) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
     request.ContentType = contentType; 
     request.Method = methodType; 
     request.Proxy = null; 

     if (methodType == Method.POST) 
     { 
      request.ContentLenght = "contentLenght"; 
      request.Headers["content-length"] = "contentLenght"; 
      request.Headers["Content-Length"] = "contentLenght"; 
      request.Headers[HttpRequestHeader.ContentLength] = "contentLenght"; 
      request.Headers["HttpRequestHeader.ContentLength"] = "contentLenght"; 
      request.Content.Headers.ContentLength = "contentLenght"; 

      ........... 

      Nothing works >< 
     } 

     Debug.WriteLine("1"); 
     Task<WebResponse> task = Task.Factory.FromAsync(
      request.BeginGetResponse, 
      asyncResult => request.EndGetResponse(asyncResult), 
      (object)null); 
     Debug.WriteLine("2"); 

     await task.ContinueWith(t => ReadStreamFromResponse(t.Result, callback, parserFunction)); 
    } 
+0

' "contentLenght은"'무엇인가? 문자열이 아닌 값이 길어야합니까? @ Emixam23 –

+0

VS2015가 말하기 때문에 : "함축적으로 'int'유형을 'string'으로 변환 할 수 없습니다." – Emixam23

+0

숫자 값을 문자열 형식으로 "1000"으로 추가하십시오. –

답변

0

감사 당신이 intead GET 요청의 POST 요청을 확인하려면 Xamarin Forums

에 미치는 답변 jsonmcgraw에, 다음 GET/POST를 할 당신이 수 할 수있는 두 가지 방법이있다 요청.

먼저 비동기 GET 요청입니다.

public static async Task<string> MakeGetRequest(string url, string cookie) 
{ 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create (url); 
    request.ContentType = "text/html"; 
    request.Method = "GET"; 
    request.Headers ["Cookie"] = cookie; 

    var response = await request.GetResponseAsync(); 
    var respStream = response.GetResponseStream(); 
    respStream.Flush(); 

    using (StreamReader sr = new StreamReader (respStream)) { 
      //Need to return this response 
     string strContent = sr.ReadToEnd(); 
     respStream = null; 
      return strContent; 
    } 
} 

샘플 사용 :

public static async Task<MyModel[]> GetInfoAsync(int page, string searchString, string cookie) 
{ 
    string url = Constants.url + Constants.Path+ 
     "page=" + page + 
     "&searchString=" + searchString; 

    string result = await WebControl.MakeGetRequest (url, cookie); 

    MyModel[] models = Newtonsoft.Json.JsonConvert.DeserializeObject<MyModel[]> (result); 

    return models; 
} 

다음으로, 비동기 POST 요청

public static async Task<string> MakePostRequest (string url, string data, string cookie, bool isJson = true) 
{ 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create (url); 
    if (isJson) 
     request.ContentType = "application/json"; 
    else 
     request.ContentType = "application/x-www-form-urlencoded"; 
    request.Method = "POST"; 
    request.Headers ["Cookie"] = cookie; 
    var stream = await request.GetRequestStreamAsync(); 
    using (var writer = new StreamWriter (stream)) { 
     writer.Write (data); 
     writer.Flush(); 
     writer.Dispose(); 
    } 

    var response = await request.GetResponseAsync(); 
    var respStream = response.GetResponseStream(); 


    using (StreamReader sr = new StreamReader (respStream)) { 
     //Need to return this response 
     return sr.ReadToEnd(); 
    } 
} 

샘플 사용 :

public static async Task<ResultModel> PostInfoAsync(int id, string cookie) 
{ 

    string data = "id=" + id; 
    //third param means that the content type is not json 
    string resp = await WebControl.MakePostRequest (Constants.url + Constants.Path, data, cookie, false); 
    ResultModel model; 

    try { 
     model = JsonConvert.DeserializeObject<ResultModel> (resp); 
    } 
    catch (Exception) { 
     model = new ResultModel{ isSuccess = false, Message = resp }; 
    } 

    return model; 
}