使用表单文件上传和隐藏输入

时间:2019-03-04 10:22:04

标签: c# html asp.net forms api

我正在使用一种形式上传图像,并希望包含来自身体的隐藏输入,但是添加此输入时出现错误:

如何允许两种类型?隐藏的输入和文件上传?

错误

{"Message":"The request entity's media type 'multipart/form-data' is not supported for this resource.","ExceptionMessage":"No MediaTypeFormatter is available to read an object of type 'Int32' from content with media type 'multipart/form-data'.","ExceptionType":"System.Net.Http.UnsupportedMediaTypeException","StackTrace":"   at System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n   at System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)"}

表格

<form method="post" enctype="multipart/form-data" data-bind="fileupload: { url: $parent.EditorImageUploadUrl }" class="form-horizontal">
    <div class="upload-image">
        <div class="button">
            <span class="btn btn-success fileinput-button">
                <input type="file" id="file" class="hidden" />
                <label for="file">Add editor photo</label>
            </span>
        </div>
        <div class="progress" style="width: 30%; float: left; margin: 10px 0 0; display:none;">
            <div class="bar" style="width: 0%;"></div>
        </div>
        <div class="info" style="width:30%; float:left; margin: 10px 0 0; display:none;"></div>
    </div>
    <input type="hidden" name="editorRef" data-bind="value: AuthorRef" />
</form>

API调用

    [Route("topics/{topicId}/uploadEditorImage/{authorRef}")]
    [HttpPost]
    public async Task<HttpResponseMessage> UpdateEditorImage(Guid topicId, [FromBody]int editorRef)
    {
        HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.UnsupportedMediaType);

        if (topicId != null)
        {
            if (Request.Content.IsMimeMultipartContent())
            {
                var provider = new MultipartMemoryStreamProvider();
                await Request.Content.ReadAsMultipartAsync(provider);

                var file = provider.Contents.First();
                var data = await file.ReadAsByteArrayAsync();

                await topicService.UploadEditorImage(topicId, authorRef, data);
                return Request.CreateResponse(HttpStatusCode.OK);
            }
        }
        else
        {
            response = Request.CreateResponse(HttpStatusCode.BadRequest, "The topic does not exist");
        }
        return response;

    }

0 个答案:

没有答案