【发布时间】:2015-12-08 23:58:04
【问题描述】:
我有一个 Api Post 方法,我希望它能够接受任何文件类型,看起来像这样:
[HttpPost]
public async Task<IHttpActionResult> Post()
{
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var provider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(provider);
if (provider.Contents.Count != 1)
{
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest,
"You must include exactly one file per request."));
}
var file = provider.Contents[0];
var filename = file.Headers.ContentDisposition.FileName.Trim('\"');
var buffer = await file.ReadAsByteArrayAsync();
}
当我尝试将图像发布到提琴手时,这适用于提琴手。但是,我正在编写一个客户端库,并且我有一个看起来像这样的方法:
public string PostAttachment(byte[] data, Uri endpoint, string contentType)
{
var request = (HttpWebRequest)WebRequest.Create(endpoint);
request.Method = "POST";
request.ContentType = contentType;
request.ContentLength = data.Length;
var stream = request.GetRequestStream();
stream.Write(data, 0, data.Length);
stream.Close();
var response = (HttpWebResponse) request.GetResponse();
using (var reader = new StreamReader(response.GetResponseStream()))
{
return reader.ReadToEnd();
}
}
每当我尝试使用它发布图片时,都会收到 UnsuportedMediaType 错误。我假设这是因为我的图像不是多部分内容?有没有一种简单的方法可以使我的请求具有正确的类型?
如果我必须更改我的 web api 发布方法,是否有一种简单的方法可以做到这一点,而无需将文件写入服务器并将其保存在内存中?
【问题讨论】:
标签: c# asp.net-web-api2