简体   繁体   English

如何从 ASP.NET 核心中的 JSON 请求正文中读取多个参数?

[英]How do I read multiple parameters from a JSON request body in ASP.NET Core?

Essentially, I have an API endpoint like this:本质上,我有一个 API 端点,如下所示:

public async Task<ActionResult<UserDTO>> SignUp(string username, string password, Guid inviteId)

I want all these parameters to come from a JSON object in the request body like so:我希望所有这些参数都来自请求正文中的 JSON object ,如下所示:

{
    'username': 'foo',
    'password': 'bar',
    'inviteId': '00000000-0000-0000-0000-000000000000'
}

I know I can create a class with these parameters as fields, but is there a cleaner way to do this?我知道我可以使用这些参数作为字段创建 class,但是有没有更简洁的方法来做到这一点? Also, how do I accept a parameter from the JSON object and another source?另外,我如何接受来自 JSON object其他来源的参数? (ie inviteId could come from the JSON object or the query string) (即, inviteId可能来自 JSON object 或查询字符串)

EDIT : To clarify, I don't want to use a custom class, or something like JObject.编辑:澄清一下,我不想使用自定义 classJObject 之类的东西。 I want the function to receive its parameters directly, without having to do any manual unpacking or parsing.我希望 function 直接接收其参数,而无需进行任何手动解包或解析。 Basically, the function signature should stay as SignUp(string username, string password, Guid inviteId) , and the solution should add on to ASP.NET's model binding functionality.基本上,function 签名应保留为SignUp(string username, string password, Guid inviteId) ,并且该解决方案应添加到 ASP.NET 的 model 绑定功能。 Also, I don't want to use any third-party packages if I can help it.另外,如果我能提供帮助,我不想使用任何第三方软件包。

There is a few alternatives.有几种选择。 I would use model-binding to accomplish this:我将使用模型绑定来完成此操作:

[HttpGet] // Or any HTTP method
public IActionResult GetSomething([FromRoute] string username, [FromQuery] SomeQuery query) 

Reference 参考

Use JObject in NewtonSoft package .NewtonSoft package JObject

  1. import进口

    using Newtonsoft.Json.Linq;
  2. Change the method like,改变方法,如

    public async Task<ActionResult<UserDTO>> SignUp([FromBody] JObject dataObject)
  3. you can access the data by key,您可以通过键访问数据,

     var username = dataObject["username"].ToString(); var password= dataObject["password"].ToString();

Using this mechanism, you can process complex JSON objects without model binding.使用这种机制,您可以在没有 model 绑定的情况下处理复杂的 JSON 对象。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在 asp.net core webapi 控制器中读取请求正文? - How to read request body in an asp.net core webapi controller? 如何从ASP.NET Core中的Request.Body中读取参数 - How to read parameter from Request.Body in ASP.NET Core ASP.NET 核心 5,带有来自正文的参数的 HttpPut 请求始终返回 Http 400 错误请求 - ASP.NET Core 5, HttpPut request with parameters from body always returns Http 400 Bad request 如何在 ASP.NET Core 5 Web API 中绑定来自请求主体的简单类型 - How can I bind simple type coming from body of the request in ASP.NET Core 5 Web API 在 ASP.NET 核心中重新读取请求正文 - Re-read a Request body in ASP.NET core ASP.NET Core无法读取请求正文 - ASP.NET Core Cannot Read Request Body ASP.NET Core - 绑定多个controller参数到body - ASP.NET Core - bind multiple controller parameters to body 如何在asp net core 5 controller(用于POST方法)中阻止无效的json请求参数 - How do I block invalid json request parameters in asp net core 5 controller (for POST method) ASP.NET核心在json post请求体中传递antiforgerytoken - ASP.NET Core pass antiforgerytoken in json post request body 如何在asp.net核心中将json请求正文验证为有效的json - How to validate json request body as valid json in asp.net core
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM