[英]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.