【问题标题】:Model binding not working in aspnet core web api模型绑定在 aspnet 核心 web api 中不起作用
【发布时间】:2019-07-23 15:16:58
【问题描述】:

我正在开发 ASP.NET Core 2.1 Web API 项目。我正在尝试关注这篇文章:https://www.c-sharpcorner.com/article/jwt-json-web-token-authentication-in-asp-net-core/,但我被困在行动中。我的模型类不会绑定到输入。

[AllowAnonymous]
[HttpPost]
public IActionResult Login([FromBody] LoginVM loginVM)
{
    IActionResult response = Unauthorized(); // cant reach this point, my breakpoint is here
    var user = AuthenticateUser(new UserModel { });

    if (user != null)
    {
        var tokenString = GenerateJSONWebToken(user);
        response = Ok(new { token = tokenString });
    }

    return response;
}

public class LoginVM
{
    public string Username { get; set; }
    public string Password { get; set; }
}

【问题讨论】:

  • 那么// some code里面是什么?你确定这不是给你错误吗?
  • @DavidG 我无法到达方法中第一行的断点。
  • 你也可以添加你的主类声明吗?我假设你也复制了 [Route("api/[controller]")][ApiController]
  • @Sasha 是的,我这样做了,但我已经通过在类的构造函数中放置断点进行检查,该点是可以到达的,所以我认为这里的路由很好。
  • 使用[FromForm]。参考Model Binding in ASP.NET Core

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


【解决方案1】:

您以x-www-form-urlencoded 发布,但您已将[FromBody] 属性应用于操作参数。这两件事根本上是不相容的。要接受x-www-form-urlencoded(或multipart/form-data),您必须将[FromForm] 属性应用于参数。如果您像现在一样拥有[FromBody],那么您只能接受application/jsonapplication/xml 之类的内容(如果您还启用了XML 序列化程序)。

如果问题是您希望能够同时接受application/json x-www-form-urlencoded 请求正文,那是不可能的。您需要为每个请求正文编码一个单独的操作,尽管您可以将操作的实际内容分解到控制器上的一个私有方法中,这两个操作都可以使用。

【讨论】:

    【解决方案2】:

    Body中选择“raw”,postman中选择“Content-Type”为“application/json”,然后试试。

    【讨论】:

    • 欢迎来到 StackOverflow。请参阅问题所附的 cmets。尝试更清楚地解释为什么这是问题的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 2020-11-01
    • 2021-09-18
    • 1970-01-01
    相关资源
    最近更新 更多