Зависит от того, как вы делаете почтовый запрос. Если вы используете Почтальон, то он должен выглядеть следующим образом в соответствии с вашей подписью действия UploadAttachment ()
, вот необработанный запрос или запрос:
POST / HTTP/1.1
Host: localhost:62117
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Host: localhost:62117
Content-Length: 294
Content-Disposition: form-data; name="metadata[key1]"
value1
------WebKitFormBoundary7MA4YWxkTrZu0gW--,
Content-Disposition: form-data; name="metadata[key1]"
value1
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Content-Disposition: form-data; name="metadata[key2]"
value2
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Если вы хотите передать содержимое json, например
, вам необходимо добавить пользовательское связующее для модели
public class DictionaryBinder : IModelBinder
{
public async Task BindModelAsync(ModelBindingContext bindingContext)
{
if (bindingContext == null)
{
throw new ArgumentNullException(nameof(bindingContext));
}
if (bindingContext.HttpContext.Request.HasFormContentType)
{
var form = bindingContext.HttpContext.Request.Form;
var data = JsonConvert.DeserializeObject<Dictionary<string, string>>(form[bindingContext.FieldName].ToString());
bindingContext.Result = ModelBindingResult.Success(data);
}
}
}
тогда
public async Task<ActionResult> UploadAttachment(
[FromRoute] string id,
IFormFile file,
[FromForm][ModelBinder(typeof(DictionaryBinder))] Dictionary<string, string> metadata)