c# - 在 C# 中路由 API 调用返回 NotFound

标签 c# .net api xamarin routes

所以我有这个应用程序连接到 API 以在数据库中注册用户。该方法如下所示:

HttpClient client = new HttpClient();
                var uri = new Uri(string.Format("https://myapinameonazure.azurewebsites.net/api/register?fullName=" + username.Text + "&password=" + password.Text + "&email=" + email.Text));
                HttpResponseMessage response;
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                response = await client.GetAsync(uri);

                if(response.StatusCode == System.Net.HttpStatusCode.Accepted)
                {
                    Toast.MakeText(this, "Rejestracja pomyślna.", ToastLength.Short).Show();
                }
                else
                {
                    Toast.MakeText(this, "Istnieje już konto z podanym mailem.", ToastLength.Short).Show();
                }

(凭据在方法之前声明)

我的 API 中的 POST 方法如下所示:

 // POST api/register
        [ActionName("Xamarin_reg")]
        [HttpPost]
        [Route("api/register")]
        [Route("api/register?")]
        [Route("api/register?fullName={fullName:string}&password={password:string}&email={email:string}")]
        HttpResponseMessage Xamarin_reg(string fullName, string password, string email)
            {
                MySqlConnection conn = new MySqlConnection(Constants.connectionString);
                MySqlDataReader reader;
                MySqlCommand checkEmailCommand = new MySqlCommand(Constants.checkIfAlreadyRegisteredQuery, conn);
                checkEmailCommand.Parameters.Add("@email", MySqlDbType.VarChar).Value = email;
                conn.Open();
                reader = checkEmailCommand.ExecuteReader();
                reader.Read();
                if (reader.HasRows)
                {
                    return new HttpResponseMessage(HttpStatusCode.Unauthorized);
                }
                else
                {
                    reader.Close();
                }
                MySqlCommand cmd = new MySqlCommand();
                cmd.Connection = conn;


                cmd.CommandText = Constants.InsertNewUserQuery;
                cmd.Parameters.Add("@username", MySqlDbType.VarChar).Value = fullName;
                cmd.Parameters.Add("@password", MySqlDbType.VarChar).Value = password;
                cmd.Parameters.Add("@password_salt", MySqlDbType.VarChar).Value = password;
                cmd.Parameters.Add("@email", MySqlDbType.VarChar).Value = email;
                cmd.Parameters.Add("@timestamp", MySqlDbType.DateTime).Value = dtNow;
                cmd.ExecuteNonQueryAsync();

                conn.Close();
                return new HttpResponseMessage(HttpStatusCode.Accepted);

            
        }

如您所见,我尝试制作一个路由模板来匹配此网址,但它总是返回 StatusCode Not Found。我该如何使这条路线发挥作用?

最佳答案

您的方法仅支持 HttpPost,因此您应该使用 this 由于这是一个发布请求,因此姓名、密码和电子邮件等数据应位于正文中

使用用户名、密码和电子邮件创建一个对象,对其进行序列化,设置 header 并将其包含在方法中

var data = new { fullName = username.Text, password = password.Text, email = email.Text };
var content = JsonConvert.SerializeObject(data);
var buffer = System.Text.Encoding.UTF8.GetBytes(content);
var byteContent = new ByteArrayContent(buffer);
byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var result = client.PostAsync(uri, byteContent).Result

关于c# - 在 C# 中路由 API 调用返回 NotFound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66817082/

相关文章:

python - GAE 错误 :-/bin/sh: 1: exec: gunicorn: not found

c# - Thread.Sleep(1) 在 C# 中有什么影响?

c# - 如何在 ASP.NET MVC 中获取错误状态代码

c# - 使用 Web 代理的 HttpWebRequest 工作,然后在一段时间后失败

.net - WPF - 组合框如何知道何时关闭下拉菜单

javascript - 如何禁止 postman 中的 API 执行?

c - vSphere API 和自动化虚拟机管理

c# - 如何使用属性路由使用自定义路由?

c# - 将正确的 Gcode 字符串发送到串行端口?

.net - 从安装程序类停止 Windows 服务时出现问题。事件触发得太晚