Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <pre><code>public class MultipartFormFormatter : FormUrlEncodedMediaTypeFormatter { private const string StringMultipartMediaType = "multipart/form-data"; private const string StringApplicationMediaType = "application/octet-stream"; public MultipartFormFormatter() { this.SupportedMediaTypes.Add(new MediaTypeHeaderValue(StringMultipartMediaType)); this.SupportedMediaTypes.Add(new MediaTypeHeaderValue(StringApplicationMediaType)); } public override bool CanReadType(Type type) { return true; } public override bool CanWriteType(Type type) { return false; } public override async Task&lt;object&gt; ReadFromStreamAsync(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger) { var parts = await content.ReadAsMultipartAsync(); var obj = Activator.CreateInstance(type); var propertiesFromObj = obj.GetType().GetRuntimeProperties().ToList(); foreach (var property in propertiesFromObj.Where(x =&gt; x.PropertyType == typeof(FileModel))) { var file = parts.Contents.FirstOrDefault(x =&gt; x.Headers.ContentDisposition.Name.Contains(property.Name)); if (file == null || file.Headers.ContentLength &lt;= 0) continue; try { var fileModel = new FileModel(file.Headers.ContentDisposition.FileName, Convert.ToInt32(file.Headers.ContentLength), ReadFully(file.ReadAsStreamAsync().Result)); property.SetValue(obj, fileModel); } catch (Exception e) { } } foreach (var property in propertiesFromObj.Where(x =&gt; x.PropertyType != typeof(FileModel))) { var formData = parts.Contents.FirstOrDefault(x =&gt; x.Headers.ContentDisposition.Name.Contains(property.Name)); if (formData == null) continue; try { var strValue = formData.ReadAsStringAsync().Result; var valueType = Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType; var value = Convert.ChangeType(strValue, valueType); property.SetValue(obj, value); } catch (Exception e) { } } return obj; } private byte[] ReadFully(Stream input) { var buffer = new byte[16 * 1024]; using (var ms = new MemoryStream()) { int read; while ((read = input.Read(buffer, 0, buffer.Length)) &gt; 0) { ms.Write(buffer, 0, read); } return ms.ToArray(); } } } public class FileModel { public FileModel(string filename, int contentLength, byte[] content) { Filename = filename; ContentLength = contentLength; Content = content; } public string Filename { get; set; } public int ContentLength { get; set; } public byte[] Content { get; set; } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload