首页 > 解决方案 > 上传文件 Asp.NET MVC 4 - Web API - Http Put 动词/方法

问题描述

所以我必须在asp.net中为一个API创建一个方法,该 API通过 PUT接受2 个文件(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";
}

到目前为止,文件没有被上传,也没有出现在请求中(一切都是空的)。我还尝试了“请求”变量和 HttpContext。

尝试了完全相同的事情,但使用 POST 方法(包括边界)并且发生了同样的事情。

你会怎么做才能完成这项工作?我真的必须发送一个 json 对象和另一个 xml 对象,我真的不能更改语言或发送 json 中的所有内容(因为我可以让它工作)......

PS:这些文件没有定义的结构,它必须是动态的 PS2:然后你将如何尝试读取这些文件而不实际保存它们?

标签: c#asp.netasp.net-mvcasp.net-web-apifile-upload

解决方案


您不必使用流来读取文件内容。您可以尝试使用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";
    }

邮差

热的

我的邮递员:

在此处输入图像描述

提琴手 在此处输入图像描述


推荐阅读