我们可以将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;

有什么 idea ,提前谢谢!!

推荐答案

在将数据传输到REST API时,您需要记住,客户端和服务器在技术方面基本上是不相关的,因此使用许多编程语言支持的共同点.在您的例子中,可能有一个.NET客户端和一个.NET服务器,但很可能是一个Java客户端调用了您的API,而您的API不知道Type类.即使您有.NET客户端和.NET服务器,客户端也可以发送服务器不知道的类型.

因此,您需要找到受各种编程环境支持的共同点,并且足够灵活,以应对客户端发送服务器无法映射到类型的数据的情况.

一种方法是不直接传输Type,而是将类型名称作为字符串传输.然后,服务器可以try 直接加载该类型.如果可以找到该类型,则它可以与该类型一起工作,否则,它将返回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,类型名称非常具体,因此服务器需要能够加载完全相同的类型,但如果无法加载该类型,则会失败.

Csharp相关问答推荐

应用程序启动时出现错误:操作无法同时使用表单和SON主体参数

无法使用ternal- .net修复可空警告

.NET框架4.7.2项目如何引用.NET Core 2.2库?

解析需要HttpClient和字符串的服务

使用LayoutKind在C#中嵌套 struct .显式

. net依赖注入如何避免服务类中的新

从.Net 6 DLL注册和检索COM对象(Typelib导出:类型库未注册.(异常来自HRESULT:0x80131165))

Rx.Net窗口内部可观测数据提前完成

为什么无法将对象转换为泛型类型

当索引和外键是不同的数据类型时,如何设置导航属性?

什么时候接受(等待)信号灯?尽可能的本地化?

正确处理嵌套的本机集合

当我没有此令牌时,为什么语法报告EOF错误?

DateTime ToString()未以指定格式打印

按需无缝转码单个HLS数据段

链接到字典字符串.拆分为(.Key,.Value)

如何更改新创建的实例的变量?

如何使用ODP.NET C#设置Oracle会话时间长度限制

如何在ASP.NET Core 8中获取键控服务词典

DropDownListFor未显示选定值