如何在ASP.NET Core Web API中将json数据绑定到FromBody Dto?

问题描述 投票:0回答:1

在我的 ASP.NET Core Web API 中,当我调用

HttpPost
的方法并接收
FromBody
中的 DTO 对象,并发送
SourceUrlDto
中不存在的额外字段时,我在代码绑定期间失败侧面。

如何以

basicDto
的名义访问此数据?

public class SourceUrlDto
{
    public string SourceApiUrl { get; set; }
    public string SourceApiMethodType { get; set; }
    public string AuthenticationType { get; set; }
}

public class BasicSourceUrlDto : SourceUrlDto
{
    public string Username { get; set; }
    public string Password { get; set; }
}

[HttpPost]
[Route("GetUrlData")]
public async Task<IActionResult> GetUrlData([FromBody] SourceUrlDto sourceUrlDto)
{
    if (sourceUrlDto is BasicSourceUrlDto basicDto)
    {   
        // ...
    }

    return Ok();
}
c# json .net-core asp.net-core-webapi
1个回答
0
投票

将 getUrlData 方法签名更改为以下内容:

public async Task<IActionResult> GetUrlData([FromBody] JObject json)

然后您可以访问其他参数,如下所示:

using Newtonsoft.Json.Linq;

[HttpPost]
[Route("GetUrlData")]
public async Task<IActionResult> GetUrlData([FromBody] JObject json)
{
    string sourceApiUrl = json["SourceApiUrl"]?.ToString();
    string sourceApiMethodType = json["SourceApiMethodType"]?.ToString();
    string authenticationType = json["AuthenticationType"]?.ToString();

    string username = json["Username"]?.ToString();
    string password = json["Password"]?.ToString();

    if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
    {
        BasicSourceUrlDto basicDto = new BasicSourceUrlDto
        {
            SourceApiUrl = sourceApiUrl,
            SourceApiMethodType = sourceApiMethodType,
            AuthenticationType = authenticationType,
            Username = username,
            Password = password
        };


    }
    else
    {
        SourceUrlDto sourceDto = new SourceUrlDto
        {
            SourceApiUrl = sourceApiUrl,
            SourceApiMethodType = sourceApiMethodType,
            AuthenticationType = authenticationType
        };

        // Use SourceUrlDtoas needed ...
    }

    return Ok();
}
© www.soinside.com 2019 - 2024. All rights reserved.