Como 변환기 Object para MultipartFormDataContent ASP.NET
A forma mais comum para en en envir formulários que contém arquivos, para uma API, é utilizando multipart/form-data, que é suportado pelo protocol http.
PostAsMultipartFormDataAsync()와 함께 사용할 수 있는 ASP.NET 기능이 없습니다. 변환기 개체, 매개 변수 및 인수, MultiPartFormDataContent 매개 변수, API 환경에서 사용할 수 있는 도구 모음.
public class MultipartFormDataContentParser<T>
{
private T _obj;
public MultipartFormDataContentParser(T obj)
{
_obj = obj;
}
public MultipartFormDataContent Parse()
{
var formContent = new MultipartFormDataContent();
var genericFileName = "Filename";
var propertyInfos = typeof(T).GetProperties();
// Mount MultipartForm
foreach (var propertyInfo in propertyInfos)
{
var value = propertyInfo.GetValue(_obj);
if (value is byte[] ||
value is Stream ||
value is List<Stream> ||
value is List<byte[]>)
{
if (value is List<Stream> listStream)
{
foreach (var file in listStream)
if(file != null)
formContent.Add(new StreamContent(file), propertyInfo.Name, genericFileName);
}else if (value is List<byte[]> listByteArray)
{
foreach (var file in listByteArray)
if(file != null)
formContent.Add(new ByteArrayContent(file), propertyInfo.Name, genericFileName);
}else
formContent.Add(getFileContent(value), propertyInfo.Name, genericFileName);
}
else if(value != null)
{
string output = value.ToString();
if (!String.IsNullOrEmpty(output))
{
formContent.Add(new StringContent(output), propertyInfo.Name);
}
}
}
return formContent;
}
private HttpContent getFileContent(object obj)
{
if (obj is Stream stream)
{
return new StreamContent(stream);
} else if (obj is byte[] byteArray)
{
return new ByteArrayContent(byteArray);
}
else
{
throw new Exception("Type not valid to create a HttpContent of file");
}
}
}
스트림, 바이트[] e até mesmo uma lista destes tipos, como parametro de arquivo. também que o foreach busca 속성, este codigo não faz a conversão de fields를 참조하십시오.
O codigo abaixo mostra um exemplo de como utilizar.
class Program
{
private static string _rootUrl = "http://localhost:8080/tests/formdata";
public class ObjectForm
{
public string Param { get; set; }
public List<Stream> File { get; set; }
public ObjectForm()
{
File = new List<Stream>();
}
}
static void Main(string[] args)
{
var client = new HttpClient();
var obj = new ObjectForm();
obj.Param = "String Param";
obj.File.Add(new FileStream("Files/File1.txt", FileMode.Open, FileAccess.Read));
obj.File.Add(new FileStream("Files/File2.json", FileMode.Open, FileAccess.Read));
MultipartFormDataContent formdata = new MultipartFormDataContentParser<ObjectForm>(obj).Parse();
HttpResponseMessage response = client.PostAsync(_rootUrl, formdata).Result;
Console.WriteLine(response.Content.ReadAsStringAsync().Result);
}
}
Reference
이 문제에 관하여(Como 변환기 Object para MultipartFormDataContent ASP.NET), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/smith_railson/como-converter-object-para-multipartformdatacontent-asp-net-38i8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)