繁体   English   中英

如何在asp.net核心webapi项目中如何将多个参数传递给控制器​​,其中一个参数是文件或字节[]

[英]How in asp.net core webapi project you can pass multiple parameters to a controller where one of them is file or a byte[]

谁能指出我正确的方向,这是将asp.net核心多个参数传递给其中一个是图像的webapi控制器的最佳方法?

我知道在MVC中您可以执行以下操作

public ActionResult Index(IEnumerable<HttpPostedFileBase> files, FormCollection form)
{
}

而不是IEnumerableFormCollection我想做这样的事情

public ActionResult Index(byte[] file, string name, DateTime createdDate )
  1. 我需要编写模型活页夹吗?
  2. 我如何使用邮递员将帖子发布到该较晚的方法?

您不能发布一个byte[] IFormFileHttpPostedFileBase的ASP.NET Core等效IFormFile

您不应该使用FormCollection 相反,创建一个可以绑定到的视图模型,其中包含要发布的所有属性。 您也可以在此视图模型中包括文件上传属性。 例如:

public class MyViewModel
{
    public IFormFile File { get; set; }
    public string Name { get; set; }
    public DateTime CreatedDate { get; set; }
} 

然后:

public IActionResult Index(MyViewModel model)

ASP.NET Core不支持通过多种不同方式(HTML表单,JSON等)对同一操作进行发布。 对于常规的旧HTML表单发布,您不需要做任何特殊的事情,但是对于发布JSON之类的东西,您必须使用[FromBody]装饰您的操作参数:

public IActionResult Index([FromBody]MyViewModel model)

使用Postman进行发布,您可以将其发布为x-www-form-urlencodedmultipart/form-data (与常规表单发布相同),但是如果您需要从那里发布JSON 接受HTML表单的发布,则可以将需要两个单独的操作:一个带有[FromBody]属性,另一个没有。 您可以在很大程度上将操作的内容分解为可以用于防止代码重复的通用方法:

[HttpPost("api/index")]
public IActionResult IndexApi([FromBody]MyViewModel model)
    => IndexCore(model);


[HttpPost("index")]
public IActionResult Index(MyViewModel model)
    => IndexCore(model);

protected IActionResult IndexCore(MyViewModel model)
{
    // action code here
}

您需要使用的文件

List<IFormFile> files

其他参数可以用相同的方式使用。

在ASP.NET Core中,您也可以使用

[FromRoute]
[FromQuery]
[FromBody]
[FromHeader]
[FromForm]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM