我遇到了.NET Core 1.0和WebAPI的問題。我想做一個簡單的控制器,它將數據流轉換成PUT方法到另一個REST服務,而不需要將這些數據存儲在內存中。 在經典ASP.NET的WebAPI沒有問題要做到這一點使用此代碼: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 1.0的核心ASP.NET的WebAPI我收到提示說,流已經耗盡。下面我附加了.NET核心代碼。我認爲我已經嘗試了一切,但我仍然收到此錯誤。 它是一個錯誤或功能的.NET核心,我必須以不同的方式做到這一點?
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();
}
}
}
}
默認請求體流只能讀一次。如果它已經被閱讀,那麼還有別的東西在閱讀它。如果你沒有在你的查詢字符串中指定'id',那麼這個綁定會讀取正在尋找'id'的身體(我認爲)。嘗試添加一個'[FromQuery]'到你的參數中;如果這不能解決問題,那麼管道中的其他事情正在讀取身體。 –
謝謝,我已經嘗試過,但它並沒有幫助:(有一點是,當我改變邏輯來保存這個流做磁盤使用FileStream而不是轉發它一切都很好 – michajas