【问题标题】:Why isnt my Web API reacting to my requests?为什么我的 Web API 没有响应我的请求?
【发布时间】:2019-04-23 15:48:50
【问题描述】:

我目前正在尝试发布到具有这样一个控制器的 Web API。

public class ProductController : ApiController
    {


        [HttpPost]
        [AcceptVerbs("POST")]
        public IHttpActionResult PostNewUser(UserModel data)
        {

            if (data.Username == null)
            {
                return NotFound();
            }

            return Ok();
        }
    }

从使用 HttpClient 的 C# 控制台应用程序 这样做。

var User = new UserModel
            {
                Username = "admin",
                Password = "password",
                HWID_Hash = "password"
            };

            string output = JsonConvert.SerializeObject(User);

            var client = new HttpClient();
            var stringContent = new StringContent(output);

            var response = await client.PostAsync($"http://localhost:51838/api/product/PostNewUser", stringContent);
            if (response.ReasonPhrase.ToLower() == "not found")
            {
                Console.WriteLine("User doesn't exist.");
            }

            if (response.ReasonPhrase.ToLower() == "ok")
            {
                Console.WriteLine("Welcome.");
            }

但是当我在 Web API 中设置断点时,它甚至不会响应我从控制台应用程序发送的请求。

这是为什么呢?

【问题讨论】:

  • 在操作方法参数之前添加[FromBody]属性,如下所示:public IHttpActionResult PostNewUser([FromBody] UserModel data)。此外,您不需要AcceptVerbs("POST") 属性。
  • 仍然没有反应。
  • client.PostASync 返回StatusCode = UnsupportedMediaType
  • 尝试初始化var stringContent = new StringContent(output, Encoding.UTF8, "applicaiton/json");
  • 太棒了!我已经发布了答案

标签: c# asp.net .net asp.net-web-api


【解决方案1】:

在动作方法参数前添加[FromBody]属性,如下所示:

public IHttpActionResult PostNewUser([FromBody] UserModel data)

另外,像这样指定 json 字符串内容的内容类型:

stringContent = new StringContent(output, Encoding.UTF8, "applicaiton/json")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-30
    • 2018-08-14
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 2021-11-08
    • 2020-06-21
    • 1970-01-01
    相关资源
    最近更新 更多