簡體   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