簡體   English   中英

System.Net.WebException:遠程服務器返回錯誤:(400)錯誤請求。 c# API登錄winform

[英]System.Net.WebException: The remote server returned an error: (400) Bad Request. c# API login winform

Net.WebException:遠程服務器返回錯誤:(400)Bad Request.login 過程對不起,我的英語不好我想我需要添加 header 授權和主機,但如何制作

private string ProcessURL(string url, string method , string post)
    {
        ASCIIEncoding encoding = new ASCIIEncoding();
        byte[] data = encoding.GetBytes(post);
        string rc = "";
        WebRequest request = WebRequest.Create(url);
        if (post != "")
        {
            request.Method = method;
            request.ContentType = "application/json";
            request.ContentLength = data.Length;


            Stream stream = request.GetRequestStream();
            stream.Write(data, 0, data.Length);
            stream.Close();

            WebResponse response = request.GetResponse();
            stream = response.GetResponseStream();

            StreamReader sr = new StreamReader(stream);
            rc = sr.ReadToEnd();
        }
        else
        {
            WebResponse response = request.GetResponse();
            StreamReader sr = new StreamReader(response.GetResponseStream());
            rc = sr.ReadToEnd();
        }
        return rc;
    }

通常, Bad request狀態碼會告訴客戶端某些參數無效。 通常會在回復中提供其他詳細信息(在收到回復后檢查您的rc字段)。 確認您發送端點的所有必需參數。

如果您沒有通過授權,那么您將收到401 Unauthorized 如果端點是安全的,那么您應該在獲得響應之前向您的請求提供Authorization header。

request.PreAuthenticate = true;
request.Headers.Add("Authorization", "Bearer " + AccessToken);

我分享完整的代碼我得到同樣的錯誤

https://prnt.sc/PDJ42V52GzSl這個作品 postman

i share full code

我得到同樣的錯誤

https://prnt.sc/PDJ42V52GzSl這個作品 postman

using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.Net;
    using System.IO;
    using System.Threading;
    using System.Diagnostics;
    using System.Xml;
    using System.Xml.Linq;
    
    namespace MyGameLauncher
    {
        public partial class F_Login : Form
        {
            string login = "https://localhost:44303/api/Users/LoginAndCreateSession";
            string register = "http://xxxx/Register.php";
            string logout = "http://xxxx/LogOut.php";
    
            string[] Errors = 
            {
                "Lost Connection to Server",
                "User Does Not Exist",
                "Password Is Incorrect",
                "User Already Logged In",
                "Different IP Re-verification Sent",
                "Username Is Taken"
            };
    
            string[] Prompts =
            {
                "Please Verify Your Email",
                "Lost Connection to Server",
                "Logged In From Another Device",
                "User Already Logged In",
                "Please Re-Verify Your Account"
            };
    
            public F_Login()
            {
                InitializeComponent();
                Init_Remember();
            }
    
            WebClient client;
            Stopwatch sw = new Stopwatch();
            String updatedVersion = "";
    
            private void F_Login_Load(object sender, EventArgs e)
            {
                DownloadFile();
            }
    
            private void B_Register_Click(object sender, EventArgs e)
            {
                if(T_RePassword.Visible == false)
                {
                    ETB_Username.Text = "";
                    ETB_Password.Text = "";
                    T_RePassword.Visible = true;
                    ETB_RePassword.Visible = true;
                    CB_RemUsername.Visible = false;
                    CB_RemPassword.Visible = false;
                    B_Login.Location = new Point(31, 188);
                    B_Register.Location = new Point(217, 188);
    
                }
                else
                {
                    Register();
                }
            }
    
            private void B_Login_Click(object sender, EventArgs e)
            {
                if(T_RePassword.Visible == true)
                {
                    ETB_Username.Text = "";
                    ETB_Password.Text = "";
                    ETB_RePassword.Text = "";
                    T_RePassword.Visible = false;
                    ETB_RePassword.Visible = false;
                    CB_RemUsername.Visible = true;
                    CB_RemPassword.Visible = true;
                    B_Login.Location = new Point(30, 131);
                    B_Register.Location = new Point(217, 131);
                }
                else
                {
                    Login();
                }
    
            }
    
            private void Login()
            {
                if (ETB_Username.Text == "" && ETB_Password.Text == "")
                {
                    MessageBox.Show("Please Enter Your Infomation");
                }
                else if (ETB_Username.Text != "" && ETB_Password.Text == "")
                {
                    MessageBox.Show("Please Enter Your Password");
                }
                else if (ETB_Username.Text == "" && ETB_Password.Text != "")
                {
                    MessageBox.Show("Please Enter Your Username");
                }
                else 
                {
                    string username = ETB_Username.Text;
                    string password = ETB_Password.Text;
                    string post = "Username=" + username + "&Password=" + password;
                    string url = login;
                    string method = "POST";
                    string rc = "";
    
                    rc = ProcessURL(url, method, post);
    
                    if (!rc.Contains("Error"))
                    {
                        if (!rc.Contains("Prompt"))
                        {
                            if (T_DownloadPercent.Text == "100%")
                            {
                                B_PlayGame.Enabled = true;
                            }
    
                            T_Welcome.Visible = true;
                            T_Welcome.Text = "Welcome, " + ETB_Username.Text;
                            T_Username.Visible = false;
                            T_Password.Visible = false;
                            ETB_Username.Visible = false;
                            ETB_Password.Visible = false;
                            B_Login.Visible = false;
                            B_Register.Visible = false;
                            CB_RemUsername.Visible = false;
                            CB_RemPassword.Visible = false;
    
                            StreamWriter loginInfo = new StreamWriter(Application.StartupPath + "/" + "LoginInfo.txt");
                            loginInfo.Write(ETB_Username.Text + "/" + ETB_Password.Text);
                            loginInfo.Close();
                        }
                        else
                        {
                            MessageBox.Show(rc.Replace("Prompt", ""));
                        }
                    }
                    else
                    {
                        MessageBox.Show(rc.Replace("Error", ""));
                    }
                }
               
            }
    
            private void Register()
            {
                if (ETB_Username.Text == "" && ETB_Password.Text == "" && ETB_RePassword.Text == "")
                {
                    MessageBox.Show("Please Enter Your Infomation");
                }
                else if (ETB_Username.Text != "" && ETB_Password.Text == "" && ETB_RePassword.Text == "")
                {
                    MessageBox.Show("Please Enter Desired Password");
                }
                else if (ETB_Username.Text == "" && (ETB_Password.Text != "" || ETB_RePassword.Text != ""))
                {
                    MessageBox.Show("Please Enter Your Username");
                }
                else if (ETB_Password.Text != ETB_RePassword.Text)
                {
                    MessageBox.Show("Password Did Not Match");
                }
                else if (ETB_Password.Text == ETB_RePassword.Text)
                {
                    string username = ETB_Username.Text;
                    string password = ETB_Password.Text;
                    string post = "username=" + username + "&password=" + password;
                    string url = "http://xxx/Register.php";
                    string method = "POST";
                    string rc = "";
    
                    rc = ProcessURL(url, method, post);
    
                    MessageBox.Show(rc);
                }
    
            }
    
            private void DownloadFile()
            {
                string url = "";
                string xmlUrl = "http://127.0.0.1/YourgameLauncher/Update.xml";
    
                Version newVersion = null;
                Version currentVersion = null;
                XmlTextReader newReader = null;
                XmlTextReader currentReader = null;
                string elementName = "";
                string currentElementName = "";
    
                newReader = new XmlTextReader(xmlUrl);
                newReader.MoveToContent();
    
                if((newReader.NodeType == XmlNodeType.Element) && (newReader.Name == "MyGame"))
                {
                    while(newReader.Read() && newReader != null)
                    {
                        if(newReader.NodeType == XmlNodeType.Element)
                        {
                            elementName = newReader.Name;
                        }
                        else
                        {
                            if((newReader.NodeType == XmlNodeType.Text) && (newReader.HasValue))
                            {
                                switch(elementName)
                                {
                                    case "version":
                                        newVersion = new Version(newReader.Value);
                                        break;
                                    case "url":
                                        url = (newReader.Value);
                                        break;
                                }
                            }
                        }
                    }
                }
    
    
                currentReader = new XmlTextReader(Application.StartupPath + "/" + "Update.xml");
                currentReader.MoveToContent();
    
                if ((currentReader.NodeType == XmlNodeType.Element) && (currentReader.Name == "MyGame"))
                {
                    while (currentReader.Read())
                    {
                        if (currentReader.NodeType == XmlNodeType.Element)
                        {
                            currentElementName = currentReader.Name;
                        }
                        else
                        {
                            if ((currentReader.NodeType == XmlNodeType.Text) && (currentReader.HasValue))
                            {
                                switch (currentElementName)
                                {
                                    case "version":
                                        currentVersion = new Version(currentReader.Value);
                                        break;
                                }
                                currentReader.Close();
                            }
                        }
                    }
                }
    
    
                if (currentVersion.CompareTo(newVersion) < 0)
                {
                    using (client = new WebClient())
                    {
                        client.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadCompleted);
                        client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressChanged);
    
                        Uri uri = new Uri(url);
                        string fileName = System.IO.Path.GetFileName(uri.AbsolutePath);
                        client.DownloadFileAsync(uri, Application.StartupPath + "/GameLauncher/Content/Paks/" + fileName);
    
                        updatedVersion = newVersion.ToString();
    
                        T_DownloadPercent.Visible = true;
                        T_Downloaded.Visible = true;
                        T_Remaining.Visible = true;
                        T_DownloadSpeed.Visible = true;
    
                        sw.Start();
                    }
                }
                else
                {
                    T_DownloadPercent.Visible = true;
                    T_DownloadPercent.Text = "100%";
                    PB_Download.Value = 100;
                }
               
            }
    
            private void DownloadCompleted(object sender, AsyncCompletedEventArgs e)
            {
                T_Downloaded.Visible = false;
                T_Remaining.Visible = false;
                T_DownloadSpeed.Visible = false;
    
                if(T_Welcome.Visible == true)
                {
                    B_PlayGame.Enabled = true;
                }
    
                XmlDocument update = new XmlDocument();
                update.Load(Application.StartupPath + "/" + "Update.xml");
                update.SelectSingleNode("MyGame/version").InnerText = updatedVersion;
                update.Save(Application.StartupPath + "/" + "Update.xml");
    
            }
    
            private void DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
            {
               
                T_DownloadPercent.Text = e.ProgressPercentage.ToString() + "%";
                T_Downloaded.Text = "Downloaded " + string.Format("{0} MB", (e.BytesReceived / 1048576d).ToString("0.00"));
                T_Remaining.Text = "Remaining " + string.Format("{0} MB", ((e.TotalBytesToReceive - e.BytesReceived) / 1048576d).ToString("0.00"));
                T_DownloadSpeed.Text = string.Format("{0} MB/s", (e.BytesReceived / 1048576d / sw.Elapsed.TotalSeconds).ToString("0.00"));
                PB_Download.Value = e.ProgressPercentage;
            }
    
            private void B_Exit_Click(object sender, EventArgs e)
            {
                if(T_Welcome.Visible == true)
                {
                    string username = ETB_Username.Text;
                    string post = "username=" + username;
                    string url = "http://xxx/Logoff.php";
                    string method = "POST";
                    string rc = "";
    
                    rc = ProcessURL(url, method, post);
                }
    
                File.Delete(Application.StartupPath + "/" + "LoginInfo.txt");
    
                Save_Remember();
    
                this.Close();
            }
    
            private void B_PlayGame_Click(object sender, EventArgs e)
            {
                Process.Start(Application.StartupPath + "/" + "game.exe");
                this.Close();
            }
    
            private string ProcessURL(string url, string method , string post)
            {
                ASCIIEncoding encoding = new ASCIIEncoding();
                byte[] data = encoding.GetBytes(post);
                string rc = "";
                WebRequest request = WebRequest.Create(url);
                if (post != "")
                {
                    request.Method = method;
                    request.ContentType = "application/json";
                    request.ContentLength = data.Length;
    
                    request.PreAuthenticate = true;
                    request.Headers.Add("Authorization", "X-CustomerGUID" + "acbf731e-d9a4-475c-b12c-64b1f8422ab3");
    
    
                    Stream stream = request.GetRequestStream();
                    stream.Write(data, 0, data.Length);
                    stream.Close();
    
                    WebResponse response = request.GetResponse();
                    stream = response.GetResponseStream();
    
                    StreamReader sr = new StreamReader(stream);
                    rc = sr.ReadToEnd();
                }
                else
                {
                    WebResponse response = request.GetResponse();
                    StreamReader sr = new StreamReader(response.GetResponseStream());
                    rc = sr.ReadToEnd();
                }
                return rc;
            }
    
            private void Init_Remember()
            {
                if(Properties.Settings.Default.RemUsername == true)
                {
                    ETB_Username.Text = Properties.Settings.Default.Username;
                    CB_RemUsername.Checked = true;
                } 
                if(Properties.Settings.Default.RemPassword == true)
                {
                    ETB_Password.Text = Properties.Settings.Default.Password;
                    CB_RemPassword.Checked = true;
                }                  
            }
    
            private void Save_Remember()
            {
                if(CB_RemUsername.Checked == true)
                {
                    Properties.Settings.Default.Username = ETB_Username.Text;
                    Properties.Settings.Default.RemUsername = true;
                    Properties.Settings.Default.Save();
    
                    if (CB_RemPassword.Checked == true)
                    {
                        Properties.Settings.Default.Password = ETB_Password.Text;
                        Properties.Settings.Default.RemPassword = true;
                        Properties.Settings.Default.Save();
                    }
                    else if (CB_RemPassword.Checked == false)
                    {
                        Properties.Settings.Default.Password = "";
                        Properties.Settings.Default.RemPassword = false;
                        Properties.Settings.Default.Save();
                    }
                }
                else 
                {
                    Properties.Settings.Default.Username = "";
                    Properties.Settings.Default.RemUsername = false;
                    Properties.Settings.Default.Save();
    
                    if (CB_RemPassword.Checked == true)
                    {
                        Properties.Settings.Default.Password = ETB_Password.Text;
                        Properties.Settings.Default.RemPassword = true;
                        Properties.Settings.Default.Save();
                    }
                    else if (CB_RemPassword.Checked == false)
                    {
                        Properties.Settings.Default.Password = "";
                        Properties.Settings.Default.RemPassword = false;
                        Properties.Settings.Default.Save();
                    }
                }
            }
    
            private void B_Donate_Click(object sender, EventArgs e)
            {
                System.Diagnostics.Process.Start("http://xxx");
            }
        }
    }

暫無
暫無

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

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