【问题标题】:Send string array with FormData in swagger C# .net core?在 swagger C# .net 核心中发送带有 FormData 的字符串数组?
【发布时间】:2019-06-11 11:11:26
【问题描述】:

我的.net api签名如下:

[HttpPost]
public async Task<ActionResult<ServiceResult>> SendEmail([FromForm]SendEmailModel model)

以下是我的招摇配置:

services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new Info
    {
        Version = "v1",
        Title = "App-Service"       
    });
});

.
.
.

app.UseSwagger();
app.UseSwaggerUI(c =>
{
    c.DocumentTitle = "App Service";
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "App Service");
});
app.UseMvc();

它生成如下内容:

但是当我执行它时,To 参数发送为

[
  "\"1\",\"2\",\"3\""
]

但它必须是:

[
  "1", "2", "3"
]

我该如何解决?

【问题讨论】:

  • 你可以尝试用formbody代替formform吗?,可能在这种情况下你有json格式,而不是发送表单你可以发送jsonboject到控制器
  • 我必须使用FormData 因为上传文件要附加到电子邮件中

标签: c# .net-core swagger multipartform-data swagger-2.0


【解决方案1】:

最好把合同改成 [FromBody] 就像 Vinit Patel 说的那样。但是,如果这不是一个选项,您将不得不对您的 SendEmailModel 模型做一些 hacky,如下所示:

[HttpPost]
public async Task<ActionResult<ServiceResult>> SendEmail([FromForm]SendEmailModel model)
{
    model.To = Regex.Replace(model.To.FirstOrDefault(), "\"", string.Empty)
            .Split(",", StringSplitOptions.None);

    //now you can loop through model.To as a string array
    foreach (string toEmail in model.To)
    {
            // Your logic here
    }
    ...
}

这可能不是最好的解决方案,但我希望它有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 2017-05-02
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    相关资源
    最近更新 更多