我遇到.NET Core 1.0和WebAPI的问题。我想做一个简单的控制器,它将把进入PUT方法的数据流转发到另一个REST服务,而不需要将这些数据存储在内存中。 在经典的ASP.NET WebAPI中,使用此代码执行此操作没有问题:
public async Task Put(string id)
{
var fileContent = this.Request.Content;
using (var handler = new HttpClientHandler() { Credentials = new NetworkCredential("XXX", "XXX") })
{
using (var client = new HttpClient(handler))
{
client.BaseAddress = new Uri(@"http://X.X.X.X/documents");
var response =
await client.PutAsync(string.Format("?uri={0}.xml", id), fileContent);
if (response.IsSuccessStatusCode)
{
Created("urltocontent", "empty");
}
else
{
BadRequest();
}
}
}
但是在.NET Core 1.0 ASP.NET WebAPI上我收到错误,说流已经被消耗了。下面我附上了.NET核心代码。我想我已经尝试过所有的东西,但我仍然遇到这个错误。 它是.NET Core的错误或功能,我必须以不同的方式进行吗?
public async Task Put(string id)
{
Stream fileContent = Request.Body;
using (var handler = new HttpClientHandler() { Credentials = new NetworkCredential("XXX", "XXX") })
{
using (var client = new HttpClient(handler))
{
client.BaseAddress = new Uri(@"http://X.X.X.X/documents");
var payload = new StreamContent(fileContent);
var response =
await client.PutAsync(string.Format("?uri={0}.xml", id), payload);
if (response.IsSuccessStatusCode)
{
Created("urltocontent", null);
}
else
{
BadRequest();
}
}
}
}
答案 0 :(得分:0)
您可以尝试在using
中初始化有效负载:
public async Task Put(string id)
{
Stream fileContent = Request.Body;
using (var handler = new HttpClientHandler() { Credentials = new NetworkCredential("XXX", "XXX") })
{
using (var client = new HttpClient(handler))
{
client.BaseAddress = new Uri(@"http://X.X.X.X/documents");
using (var payload = new StreamContent(fileContent))
{
var response =
await client.PutAsync(string.Format("?uri={0}.xml", id), payload);
if (response.IsSuccessStatusCode)
{
Created("urltocontent", null);
}
else
{
BadRequest();
}
}
}
}
}