[英]How to pass multiple parameters (Objects) in IActionResult 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)
{
}
而不是IEnumerable
和FormCollection
我想做这样的事情
public ActionResult Index(byte[] file, string name, DateTime createdDate )
您不能发布一个byte[]
。 IFormFile
是HttpPostedFileBase
的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-urlencoded
或multipart/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.