2017-06-20 17 views
0

私は数多くの関連する質問を私の問題に読んでいますが、誰も私の問題を解決していません。私はHttpWebRequestをC#で作成しています。ここでデータを投稿し、応答が常に空白として返される以外は応答を読み取ります。私はrequest.contentTypeを変更して、エンコードされていないASCII、& UTF8からさまざまな形式のデータをエンコードしてみました。私が何をしても、私の反応は空白です。また、サイドノートとして、私の要求マイ応答ショーとしてC#HttpWebRequestは空白を返します

var request = (HttpWebRequest)WebRequest.Create(serviceURL); 
var postData = "\"device\"=\"9856\""; 
var data = Encoding.ASCII.GetBytes(postData); 
//request.ContentType = "application/x-www-form-urlencoded"; 
request.ContentType = "application/json; charset=utf-8"; 
request.Timeout = 5000; 
request.Headers.Add("Authorization", b64); 
request.Headers.Add("reqtime", hmacTS); 
request.Headers.Add("appkey", APP_KEY1); 
request.Method = "POST"; 
request.ContentLength = data.Length; 

try 
{ 
    using (var stream = request.GetRequestStream()) 
    { 
     stream.Write(data, 0, data.Length); 
    } 
    var response = (HttpWebResponse)request.GetResponse(); 
    using (var streamReader = new StreamReader(response.GetResponseStream())) 
    { 
     var result = streamReader.ReadToEnd(); 
     updateWindow(this, "Results: " + result); 
     updateWindow(this, "Type: " + response.ContentType); 
     updateWindow(this, "Content Length: " + response.ContentLength); 
    } 
} 
catch (WebException a) 
{ 
    updateWindow(this, "ERROR: " + a); 
} 

層7を通過している:ちょうど皆を更新する

Results: 
Type: application/octet-stream 
Content Length: 0 

、私は最終的に、問題の根本になりました。データベース接続が解除されたため、サービスプロバイダはサーバーを再起動する必要がありました。このコードで約1週間戦った後、私は最終的に私をチェックすることにしたと思う.....助けようとしたすべての人に感謝!

+4

Fiddlerのようなものを実際に使ってみましたか** **あなたが送っているものと送っているものを見ていますか? –

+0

はい私はフィドラーを使用していて、体は正しいようです。また、フィドラーは取引の例外を表示しません。 – Konan

+0

私はフィドラーにレスポンスボディーを見ません。 Content-Length:0、Content-Type:application/octet-stream – Konan

答えて

0
public static bool GetResponseForJson(string url, out object jsonObject) 
{ 
    bool result; 

    try { 

    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url); 
    webRequest.Method = "POST"; 
    HttpWebResponse httpWebResponse = (HttpWebResponse)webRequest.GetResponse(); 
    StreamReader sr = new StreamReader(httpWebResponse.GetResponseStream()); 
    jsonObject = new JavaScriptSerializer().DeserializeObject(sr.ReadToEnd()); 
    result = true; 
    } 
    catch { 

    jsonObject = null; 
    result = false; 
    } 
    return result; 
} 

これは、URLからレスポンスオブジェクトを取得するために使用するメソッドです.WebRequest.MethodをGETなどに変更できます。

+0

ありがとうございました。あなたのコードはJsonの非直列化を除いて私とほとんど同じです。私はこの提案を試みましたが、私の反応はまだ空です。 – Konan

+0

@ Konanあなたの場合、sr.ReadToEnd()は空の文字列を返しますか? – Peter

+0

はい、それは空です – Konan

0

最初にrespone HTTPコードを確認します。また、認可を使用しています。 Authorizationヘッダーの値が正しいかどうかを確認します。ベアラトークン認可を使用している場合は、ヘッダーに実際のトークンの前にベアラを置く必要があります。

+0

私は認可を使用しており、私の認証ヘッダーの値が正しいです。レイヤー7で例外が発生した場合は、何らかのエラーが表示されませんか? – Konan

+0

バックエンドの実装によって異なります。正しい方法は、HTTPコードでステータスを返すことです。 –

関連する問題