1

GETとパラメータを使用してリクエストを作成しようとしました。しかし、私はWinPhone8.1の例外がありました。つまり、GETはコンテンツが追加されたために違反プロトコルになっていました。だから、POST要求をすることが解決策です。Xamarinフォーム - 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

感謝jsonmcgrawXamarin Forums

にその答えのためのあなたはintead GETリクエストのPOSTリクエストを作成したい場合は、GET/POSTを作ることが、あなたができるようにすることができる2つの方法がありますリクエスト。

まず、非同期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; 
} 
関連する問題