简体   繁体   中英

Upload files Asp.NET MVC 4 - Web API - Http Put verb/method

So I have to make a method in asp.net for an API that accepts 2 files via PUT (1 json and 1 xml for processing data, not saving- because I have to, OK? :) ), sending the request via fiddler ..

Right now I'm sending the request like this on fiddler (PUT METHOD):

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

Request body:

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

Here's what I've tried inside the controller so far:

[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";
}

So far the file is not being uploaded nor appears within the request (everything's null). I've also tried the "Request" variable and HttpContext.

Tried the exact same thing but with a POST Method (including the boundaries) and the same happens.

What would you do in order to make this work? I really have to send a json object and another in xml, I really can't change languages or send everything in json ('cause that I could make it work)...

PS: The files don't have a defined structure, it has to be dynamic PS2 : How would you then attempt to read those files without actually saving them?

You don't have to use a stream to read the file content. You can just try using the 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

热的

My POSTMAN:

enter image description here

Fiddler在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM