2017-09-11 4 views
0

XML文字列を渡したいHttpWebRequestヘッダーには? MVC4での私のアプリケーション.Net Framework 4.5 C#。 次のように私のコード:HttpWebRequestヘッダーC#MVC4でXML文字列を渡す方法?

try 
{ 
    String requestXML = @"<REPORT>  
          <USER-DETAIL> 
           <NAME>ABC</NAME1> 
           <PASSWORD>12345</NAME2> 
          </USER-DETAIL> 
         </REPORT>"; 

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.demoservice.com/service/getReport"); 
    request.Accept = "application/xml"; 
    request.Method = "POST"; 
    request.Headers.Add("userId", "admin"); 
    request.Headers.Add("password", "***"); 
    request.Headers.Add("requestXml", requestXML); 

    HttpWebResponse response; 
    response = (HttpWebResponse)request.GetResponse(); 
    if (response.StatusCode == HttpStatusCode.OK) 
    { 
     Stream responseStream = response.GetResponseStream(); 
     String output = new StreamReader(responseStream).ReadToEnd(); 
     Console.WriteLine(output); 
    } 
} 
catch (Exception ex) 
{ 
    Console.WriteLine(ex.Message); 
    throw; 
} 

しかし、私は

指定された値が無効CRLF文字を持って、次のエラーを取得しています。パラメータ名:値

ご協力ありがとうございます。

+1

あなたは、単一の行にそれらの改行や書式のXMLを削除してみましたか? –

+0

POSTデータをヘッダに追加するのはなぜですか?あなたはそれをする必要があると思いましたか? – CodeCaster

+0

私はすべての新しい行を削除してxmlの1行を作成した後、私の問題を解決しました。 @shivaGopal – Pravin

答えて

0

リクエストヘッダーに任意のデータを追加しないでください。 POSTデータは、本体の要求に含める必要があります。リクエストヘッダはHTTP仕様に準拠していなければなりません。あなたが間違って入力しようとしているデータはそうではありません。

これは、あなたがそれをやるべきかです:

var data = Encoding.UTF8.GetBytes(requestXML); 
request.ContentType = "application/xml"; 
request.ContentLength = data.Length; 
using (var body = request.GetRequestStream()) 
{ 
    body.Write(data, 0, data.Length); 
} 
+0

のおかげで、ヘルプ@ChrisPrattに感謝しますが、APIはサードパーティによって提供され、セキュリティ上の理由から、webRequestのヘッダセグメントにすべてのパラメータが必要です。だから私はヘッダー内のすべてのパラメータを渡す必要があります。 – Pravin

+0

まあ、base64のようなデータをエンコードしようとするかもしれませんが、第三者がそのデータをデコードしなければならない可能性があります。長くて短く、HTTP仕様が違反されているので、可能なことの壁にぶつかるだけです。第三者に適切なAPIを設計するか、別の第三者を探すように指示する必要があります。 –

関連する問題