做了一段登陸代碼,老是回傳400,不知道哪里問題?請做過的賜教,不勝感激。代碼如下:
///////////////////////////////////////////////////////////////////////////////////////////
//添加Post 引數
System.Text.StringBuilder builder = new System.Text.StringBuilder();
int i = 0;
foreach (var item in dic)
{
if (i > 0)
builder.Append("&");
builder.AppendFormat("{0}={1}", item.Key, item.Value);
i++;
}
byte[] postData = System.Text.Encoding.UTF8.GetBytes(builder.ToString());
System.Net.HttpWebRequest _webRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
_webRequest.Method = "POST";
//HttpWebRequest http = (HttpWebRequest)WebRequest.Create(url);
// -H 表示http請求中需要有一個Header資訊
// -H "Accept: application/json"
_webRequest.Accept = "application/json ";
_webRequest.Headers.Add("username", "13332999209,");
_webRequest.Headers.Add("password", "123456");
// -u 賬號:密碼,提交身份驗證資訊
//_webRequest.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Syste.Text.Encoding.UTF8.GetBytes("賬號:密碼")));
// _webRequest.ContentType = "application/json;charset=UTF-8";
//內容型別
_webRequest.ContentType = "application/x-www-form-urlencoded";
//_webRequest.ContentType = "text/plain";
_webRequest.Timeout = 1000 * 30;
_webRequest.Proxy = null;
_webRequest.ContentLength = postData.Length;
using (System.IO.Stream reqStream = _webRequest.GetRequestStream())
{
reqStream.Write(postData, 0, postData.Length);
reqStream.Close();
}
System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse)_webRequest.GetResponse();//這里登陸失敗,回傳400
System.IO.Stream stream = resp.GetResponseStream();
//獲取回應內容
using (System.IO.StreamReader reader = new System.IO.StreamReader(stream, System.Text.Encoding.UTF8))
{
result = reader.ReadToEnd();
}
return result;
uj5u.com熱心網友回復:
是你的資料不對,json的資料不能那樣寫,你最好使用其他json工具包將dic物件轉換為json的字串這里推薦使用 Postman先測驗一下,然后對照寫你的代碼
Postman使用介紹: https://www.jianshu.com/p/8f8014ad85aa
uj5u.com熱心網友回復:
一般我寫的時候是請求體用Json形式的字串,然后用這兩函式來處理public static HttpWebResponse HttpResponsePost(string url, string postData = null,
Encoding requestEncoding = null, int? timeout = null, string userAgent = null,
CookieCollection cookies = null, bool sendJson = false, bool sendXml = false)
{
if (string.IsNullOrEmpty(url))
{
throw new ArgumentNullException("url");
}
if (requestEncoding == null)
{
requestEncoding = Encoding.UTF8;
}
HttpWebRequest request = null;
//如果是發送HTTPS請求
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
ServicePointManager.ServerCertificateValidationCallback =
new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10;
}
else
{
request = WebRequest.Create(url) as HttpWebRequest;
}
request.Method = "POST";
if (sendJson)
{
request.ContentType = "application/json";
}
else if (sendXml)
{
request.ContentType = "application/xml";
}
else
{
request.ContentType = "application/x-www-form-urlencoded";
}
if (!string.IsNullOrEmpty(userAgent))
{
request.UserAgent = userAgent;
}
else
{
request.UserAgent = DefaultUserAgent;
}
if (timeout.HasValue)
{
request.Timeout = timeout.Value;
}
if (cookies != null)
{
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(cookies);
}
//如果需要POST資料
if (!string.IsNullOrEmpty(postData))
{
byte[] data = requestEncoding.GetBytes(postData);
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
}
return request.GetResponse() as HttpWebResponse;
}
uj5u.com熱心網友回復:
400是對方服務器回傳的代碼,表示 url 決議時找不到對應的目地。轉載請註明出處,本文鏈接:https://www.uj5u.com/net/70717.html
標籤:C#
上一篇:asp.net core 2.1 的webapi無法請求 HttpPost 方法
下一篇:求助!MVC登錄彈窗
