C# HttpWebRequest在c中的发布

C# HttpWebRequest在c中的发布,c#,winforms,httpwebrequest,C#,Winforms,Httpwebrequest,我有一个允许用户插入数据库的Api。我正在尝试在windows窗体应用程序中请求Api,但不断获取System.Net.WebException:“远程服务器返回错误:403禁止。”我对Api请求相对较新。谁能看出我做错了什么,谢谢 客户类别: public class Customer { public int StoreCustomerID { get; set; } // Actaul customer from store ID p

我有一个允许用户插入数据库的Api。我正在尝试在windows窗体应用程序中请求Api,但不断获取System.Net.WebException:“远程服务器返回错误:403禁止。”我对Api请求相对较新。谁能看出我做错了什么,谢谢

客户类别:

public class Customer
    {
        public int StoreCustomerID { get; set; }
        // Actaul customer from store ID
        public string Number { get; set; }
        public string Name { get; set; }
        public string Surname { get; set; }
        public string Address { get; set; }
        public string Email { get; set; }
        public string City { get; set; }
        public string Region { get; set; }
        public string Country { get; set; }
        public string MobilePhone { get; set; }
        public System.DateTime DOB { get; set; }
        public string Phone { get; set; }
        //public User Credentials { get; set; }
        public string DeviceToken { get; set; }
        //public CustomerCard Details { get; set; }
        public string Gender { get; set; }
        public bool IsError { get; set; }
        public string ErrorMessage { get; set; }
        //Public Property StoreNumber As Integer


            public string Token { get; set; }
            public bool Authenticated { get; set; }
            public string SecretKey { get; set; }

    }
API请求类:

private void button1_Click(object sender, EventArgs e)
        {

            Customer cust = new Customer();
            InsertUpdateCustomer(cust, "http://Example.com");
        }

        public static Customer InsertUpdateCustomer(Customer MyCustomer, string ServerAddress)
        {

            //Dim PostData As New CardInfo With {.CardNumber = CardNumber, .Reference = Reference, .SaleDate = DateTime.Now, .SaleTotalAmount = Amount, .StoreNumber = StoreNumber, .TransactionTypeID = Transaction}

            //Customer Res = new Customer();
            string webAddr = ServerAddress + "/api/Customer/Insert";


            WebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Method = "POST";
            httpWebRequest.Headers.Add("X-Giftworx-App", "Posworx");
            httpWebRequest.Timeout = 4000;

            MyCustomer.Name = "Janice";
            MyCustomer.Surname = "Alexander";
            MyCustomer.Email = "j@example.com";
            MyCustomer.MobilePhone = "0314011828";
            MyCustomer.Gender = "Female";
            MyCustomer.DOB = DateTime.Now;
            MyCustomer.Token = "wMq0cZ4iN7uOnJdrSdYITQcWHQ9VYgiLCosN7Rj9MSdqmZKSTuHCb08jeO/wlp3bCoK/sbEwwvjlZUeQdj8p5w==";
            MyCustomer.SecretKey = "jdghe45";
            MyCustomer.Authenticated = true;


            try
            {
                using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
                {

                    string jsonstring;


                    MemoryStream stream1 = new MemoryStream();

                    //Serialize the Record object to a memory stream using DataContractJsonSerializer.
                    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Customer));
                    ser.WriteObject(stream1, MyCustomer);


                    stream1.Position = 0;

                    StreamReader sr = new StreamReader(stream1);

                    jsonstring = sr.ReadToEnd();

                    Debug.WriteLine("JSON form of Insert Loyaltyworx Update Customer object: ");
                    Debug.WriteLine(JObject.Parse(jsonstring));

                    streamWriter.Write(jsonstring);
                    streamWriter.Flush();
                }
            }
            catch (Exception ex)
            {
                return null;
            }

            try
            {
                HttpWebResponse httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                if (httpResponse.StatusCode == HttpStatusCode.OK)
                {
                    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                    {
                        string result = streamReader.ReadToEnd();
                        Console.WriteLine(JObject.Parse(result));

                        Customer MyResult = JsonConvert.DeserializeObject<Customer>(result);


                        Debug.WriteLine(JObject.Parse(result));

                        return MyResult;

                    }
                }
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {

                return null;
            }

        }

确保您以管理员身份使用应用程序,并检查防火墙/防病毒软件是否未被阻止。

您可以将数据转换为json字符串,如下所示

 Customer cust = new Customer();
 var json = new JavaScriptSerializer().Serialize(cust );
 JObject json2 = JObject.Parse(json);
然后你可以打这样的电话

 string webAddr = ServerAddress + "/api/Customer/Insert";
 HttpClient client = new HttpClient();
 HttpResponseMessage response = client.PostAsJsonAsync(webAddr , json2).Result;

当您调试服务器端web服务器时,在返回401之前会发生什么?请包括它正在调用的服务器端方法的源代码…感谢您的响应,我意识到我只是缺少了一个不可为空的字段:谢谢,我意识到我只是缺少了一个不可为空的字段。