簡體   English   中英

使用rest客戶端應用程序發送Web請求,但不使用c#

[英]Send Web request working with rest client app, but not working with c#

我正在通過c#webrequest和httpClient向api發送一個帖子請求,但我總是從api收到一條錯誤消息,說明你在標題中發布了無效數據,但重點是我用chrome擴展高級休息客戶端發送相同的數據工作得很好,我比較了兩個請求沒有什么不同,我已經附加了請求和我的代碼,任何人都可以幫助找出問題所在,

這是來自其他客戶端應用程序的請求:

在此輸入圖像描述

這是來自c#的請求

在此輸入圖像描述

這是我的c#代碼

 string item = "<?xml version=\"1.0\" encoding=\"UTF - 8\"?>" +
  "<request>" +
  "<Username>admin</Username>" +
  "<Password>" + password + "</Password>" +
  "<password_type>4</password_type>" +
  "</request> ";
var request = (HttpWebRequest)WebRequest.Create("http://192.168.8.1/api/user/login");
request.Method = "POST";
request.Headers["_RequestVerificationToken"]= Token;
request.Headers["Cookie"] = Sess;
byte[] bytes = Encoding.UTF8.GetBytes(item);
request.ContentType = "application/xml;charset=UTF-8";
request.ContentLength = bytes.Length;
Stream streamreq = request.GetRequestStream();
streamreq.Write(bytes, 0, bytes.Length);
streamreq.Close();
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
    var result = reader.ReadToEnd();
}

看起來__RequestVerificationToken__RequestVerificationToken包含兩個下划線,所以試試這個:

request.Headers["__RequestVerificationToken"]= Token;

它在這里看到的主要區別在於您發送的API

application/xml 

但是你發送的C#代碼

application/xml;charset=UTF-8;

在您的API中,內容長度為230,在C#中,內容長度為227,3個字符更少。

現在,這可能是一個很長的鏡頭,但字符集對每個瀏覽器和每種語言的工作方式都不同,因此在代碼中添加charset=UTF-8時可能會出現問題。

發送您的請求如下:

 string item = "<?xml version=\"1.0\" encoding=\"UTF - 8\"?>" +
  "<request>" +
  "<Username>admin</Username>" +
  "<Password>" + password + "</Password>" +
  "<password_type>4</password_type>" +
  "</request> ";
var request = (HttpWebRequest)WebRequest.Create("http://192.168.8.1/api/user/login");
request.Method = "POST";
request.Headers["_RequestVerificationToken"]= Token;
request.Headers["Cookie"] = Sess;
byte[] bytes = Encoding.UTF8.GetBytes(item);
request.ContentType = "application/xml";
request.ContentLength = bytes.Length;
Stream streamreq = request.GetRequestStream();
streamreq.Write(bytes, 0, bytes.Length);
streamreq.Close();
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
    var result = reader.ReadToEnd();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM