Загрузить файлы Asp. NET MVC 4 - Веб-API - глагол Http Put / метод - PullRequest
0 голосов
/ 03 февраля 2020

Так что мне нужно создать метод в asp. net для API , который принимает 2 файлов через PUT (1 json и 1 xml для обработки данных, а не для сохранения - потому что я должен, хорошо? :)), отправка запроса через fiddler ..

Прямо сейчас я отправляю запрос на фиддлере (PUT METHOD):

Content-Type: multipart/form-data
Authorization: XXXXX 
Host: XXXX

Тело запроса:

<@INCLUDE *C:\Users\ZZZZ.json*@>
<@INCLUDE *C:\Users\XXXX.xml*@>

Вот что я пробовал внутри пока что контроллер:

[HttpPut, Route("api/Student/{studentId}/Classes/{classId}")]
public async Task<string> Put(int studentId, int classId)
{
        var file = HttpContext.Current.Request.Files.Count > 0 ?
    HttpContext.Current.Request.Files[0] : null;
    Stream fileContent = await this.Request.Content.ReadAsStreamAsync();
    MediaTypeHeaderValue contentTypeHeader = this.Request.Content.Headers.ContentType;


    if (fileContent != null)
        return "ok";
    return "not ok";
}

Пока что файл не загружается и не появляется в запросе (все равно null). Я также пробовал переменную «Запрос» и HttpContext.

Пробовал ту же самую вещь, но с методом POST (включая границы), и то же самое происходит.

Что бы вы сделали в чтобы сделать эту работу? Мне действительно нужно отправить json объект и еще один в xml, я действительно не могу изменить язык или отправить все в json (потому что я могу заставить его работать) ...

PS: файлы не имеют определенной структуры, они должны быть динамическими PS2: как бы вы попытались прочитать эти файлы, не сохранив их на самом деле?

1 Ответ

1 голос
/ 03 февраля 2020

Вам не нужно использовать поток для чтения содержимого файла. Вы можете просто попробовать использовать HttpPostedFile.

  [HttpPut, Route("api/student/{studentId}/classes/{classId}")]
    public async Task<string> Put(int studentId, int classId)
    {
        if (HttpContext.Current.Request.Files.Count == 0)
            throw new HttpResponseException(new HttpResponseMessage()
            {
                ReasonPhrase = "Files are required",
                StatusCode = HttpStatusCode.BadRequest
            });

        foreach (string file in HttpContext.Current.Request.Files)
        {
            var postedFile = HttpContext.Current.Request.Files[file];
            if (!(postedFile.ContentType == "application/json" || postedFile.ContentType == "application/xml"))
            {
                throw new System.Web.Http.HttpResponseException(new HttpResponseMessage()
                {
                    ReasonPhrase = "Wrong content type",
                    StatusCode = HttpStatusCode.BadRequest
                });
            }

        }
        return "OK";
    }

POSTMAN

hot

Мой POSTMAN:

введите описание изображения здесь

Скрипач enter image description here

...