【问题标题】:Get the content of a HttpRequestMessage without headers获取没有标头的 HttpRequestMessage 的内容
【发布时间】:2014-04-19 20:04:34
【问题描述】:

我正在开发一个 MVC ApiController 来管理上传文件的序列化。

我用这个方法访问上传文件的内容:

public class UploadController : ApiController
{
    [System.Web.Http.HttpPost]
    public UploadOutcome UploadFile()
    {
        HttpContent selectFile = Request.Content;
        UploadOutcome res = null;

        //implements the serialization logic
        SerializerManager serializer = new SerializerManager();

        try
        {
            string content = selectFile.ReadAsStringAsync().Result;
            res = serializer.Serialize(content);
        }
        catch(Exception ex)
        {
            throw ex;
        }

        return res;
    }
}

Request.Content.ReadAsStringAsync().Result 是一种广泛使用的解决方案。请参阅herehere

不幸的是,获得的content字符串包含HttpRequestMessage的内容和标题:

文件内容

920-006099 ;84;65;07/03/2014 00:00;13/03/2014 23:59;10;BZ;1
RL60GQERS1/XEF;1499;1024;07/03/2014 00:00;13/03/2014 23:59;5;KV;1

内容字符串

-----------------------------11414419513108
Content-Disposition: form-data; name="selectFile"; filename="feed.csv"
Content-Type: text/csv

920-006099 ;84;65;07/03/2014 00:00;13/03/2014 23:59;10;BZ;1
RL60GQERS1/XEF;1499;1024;07/03/2014 00:00;13/03/2014 23:59;5;KV;1
-----------------------------11414419513108--

问题

有没有办法摆脱标题?换句话说,我想获取没有标题的内容。

【问题讨论】:

  • 您可以使用HttpPostedFile 作为您方法的参数。你从Content 得到的实际上是身体。它只是碰巧在内容中重复了标题以及文件。
  • @Kenneth,不适用于 ADC 显然正在使用的 Web API。

标签: c# asp.net-mvc-4 file-upload


【解决方案1】:

你应该使用ReadAsMultipartAsync:

var content = await selectFile.ReadAsMultipartAsync(); // You *really* ought to be using await
var body = await content.Contents.Single(x => x.Headers.ContentDisposition.Name == "\"selectFile\"").ReadAsStringAsync();

您的内容(不包括标题)将位于body。要使用await,您应该将方法签名更改为:

public async Task<UploadOutcome> UploadFile()

【讨论】:

  • 不幸的是,await 在 MVC4 中不可用。标签已更新。
  • @ADC,这不是真的:byterot.blogspot.com/2012/03/… 如果您使用的是 .Net 4.0,而不是 4.5,那将是真的。在这种情况下,我的答案是一样的,但是您可以像在原始问题中那样同步获得它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 2023-03-07
相关资源
最近更新 更多