在我的 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();
}
将 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();
}