在不使用DTO类的情况下发布多个参数

Post Multiple Parameters Without DTO Class(在不使用DTO类的情况下发布多个参数)
本文介绍了在不使用DTO类的情况下发布多个参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的Web项目上有一个调用API的操作

    [HttpPost]
    public async Task<IActionResult> ExpireSurvey(int id)
    {
        var token = await HttpContext.GetTokenAsync("access_token");

        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);

            var path = "/api/forms/ExpireSurvey";
            var url = Domain + path;
            var data = JsonConvert.SerializeObject(id);
            HttpContent httpContent = new StringContent(data, Encoding.UTF8, "application/json");
            var response = await client.PutAsync(url, httpContent);

            return Json(response);
        }
    }

在API项目中,它的接收方式如下:

[HttpPut]
    public IActionResult ExpireSurvey([FromBody] int surveyId)
    {
        _repository.ExpireSurvey(surveyId, expiryDate);
        return Ok();
    }

这很好用--但是,假设我想传入一个int id和一个DateTime变量,我如何序列化它们并将它们都传递到HttpContent中?我可以使用DTO对象执行此操作,但当只有两个字段时,我不想设置DTO对象。

推荐答案

您可以像这样使用匿名类型

var x = new { id = 2, date = DateTime.Now };
var data = JsonConvert.SerializeObject(x);

接收数据时,只能有一个[FromBody]参数。因此,这不适用于接收多个参数(除非您可以将除一个参数外的所有参数都放入URL)。如果不想声明DTO,可以使用如下动态对象:

[HttpPost]
public void Post([FromBody] dynamic data)
{
    Console.WriteLine(data.id);
    Console.WriteLine(data.date);
}

不要过度使用匿名类型和动态变量。它们对于使用JSON非常方便,但您会失去所有类型检查,这是使C#真正易于使用的事情之一。

这篇关于在不使用DTO类的情况下发布多个参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)