我们可以将 C# 类型对象上传到 Post 方法吗?
[HttpPost]
[Route("SendModelPayload")]
public async Task<IActionResult> SendModelPayload([FromBody] Type type)
{
// Do some stuff
return Ok("test");
}
但是,这里的类型为空。
客户端代码:
HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri(@"http://localhost:5000");
var res = httpClient.PostAsJsonAsync(@"/api/ModelPayload/SendModelPayload",
typeof(Student)).Result;
任何想法,提前致谢!!
最佳答案
将数据传输到 REST API 时,您需要记住,客户端和服务器在技术方面基本上不相关,因此使用许多编程语言支持的共同点。在您的情况下,可能有一个 .NET 客户端和一个 .NET 服务器,但很可能 Javascript 客户端调用不知道 Type
类的 API。即使您有 .NET 客户端和 .NET 服务器,客户端也可能发送服务器不知道的类型。
因此,您需要找到一个受各种编程环境支持且足够灵活的共同点,以应对客户端发送的数据而服务器无法映射到类型的情况。
一种方法是不直接传输Type
,而是将类型名称作为字符串传输。然后服务器可以尝试直接加载类型。如果可以找到该类型,则可以使用该类型,如果没有,它将返回 BadRequestResult
以通知客户端无效数据。
[HttpPost]
[Route("SendModelPayload")]
public async Task<IActionResult> SendModelPayload([FromBody] string typeName)
{
// Try to load type
var type = Type.GetType(typeName);
if (type == null)
return BadRequest();
// Do some stuff
return Ok("test");
}
客户端将发送类型名称而不是实际类型,例如
var res = httpClient.PostAsJsonAsync(@"/api/ModelPayload/SendModelPayload",
typeof(Student).AssemblyQualifiedName).Result;
通过传输AssemblyQualifiedName
,类型名称非常具体,因此服务器需要能够加载完全相同的类型,但如果无法加载该类型则会失败。
关于C# 类型对象作为 Post 方法的有效负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73697957/