может кто-нибудь сказать мне, как загрузить файл в multipart-form-data, чтобы я мог добавить пост-параметры и файл в качестве контента.





Если вам нужны как files, так и объекты в полезной нагрузке, вы можете использовать форму multipart следующим образом:
Форма
<form id = "createForm" method = "post" enctype = "multipart/form-data" action = "http://localhost:5000/api/send">
<input type = "text" name = "Field1" id = "field1" />
<input type = "text" name = "Field2" id = "field2" />
<input type = "file" id = "bulk" name = "Bulk" required />
</form>
ПОКО
class MyClass
{
public string Field1{get;set;}
public string Field2{get;set;}
}
Контроллер
В контроллере вы можете получить доступ к файлам, используя Request.Form.Files, что дает вам коллекцию со всеми вашими загруженными файлами. Затем вы можете прочитать свои файлы, используя StreamReader, как я делаю ниже:
[HttpPost]
[Route("api/send")]
[DisableRequestSizeLimit]
public async Task<long> CreateAsync(MyClass obj) {
{
var file=this.Request.Form.Files[0]; //there's only one in our form
using(StreamReader reader=new StreamReader(file))
{
var data=await reader.ReadToEndAsync();
Console.WriteLine("File Content:"+data);
Console.WriteLine("{ Field1 :"+obj.Field1.ToString()+",Field2:"+obj.Field2.ToString()+"}");
}
}
Осторожность
Будьте осторожны при работе с multipart, так как вам также нужно будет указать maximum размер сегмента.
Это делается в Startup:
public void ConfigureServices(IServiceCollection services) {
services.Configure<FormOptions>(options => {
options.ValueCountLimit = 200;
options.ValueLengthLimit = int.MaxValue;
options.MultipartBodyLengthLimit = long.MaxValue;
});
}
или, как я сделал это непосредственно в методе Controller-s, украсив его атрибутом [DisableRequestSizeLimit].