0
如何閱讀C#/ ASP.net中HttpResponse對象的內容?您如何閱讀C#/ ASP.NET中的HttpResponse對象的正文內容?
我需要能夠將主體內容作爲JSON對象讀取,修改它,然後將其寫回到響應輸出流。我想確保我不會丟失流中已有的內容,因此我需要先閱讀它。
我該怎麼做?
如何閱讀C#/ ASP.net中HttpResponse對象的內容?您如何閱讀C#/ ASP.NET中的HttpResponse對象的正文內容?
我需要能夠將主體內容作爲JSON對象讀取,修改它,然後將其寫回到響應輸出流。我想確保我不會丟失流中已有的內容,因此我需要先閱讀它。
我該怎麼做?
您可以使用委派處理
public class ContentHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
return base.SendAsync(request, cancellationToken).ContinueWith<HttpResponseMessage>((responseToCompleteTask) =>
{
HttpResponseMessage response = responseToCompleteTask.Result;
var YourContent = response.Content.ReadAsStreamAsync().Result;
response.Content = new CompressedContent(response.Content, acceptedEncoding);
return response;
},
TaskContinuationOptions.OnlyOnRanToCompletion);
}
}
在WebApiConfig
GlobalConfiguration.Configuration.MessageHandlers.Add(new ContentHandler());
註冊您處理,您可以通過擴展HttpContent類編輯內容效應初探。 例如要壓縮內容
public class CompressedContent : HttpContent
{
private HttpContent originalContent;
protected override bool TryComputeLength(out long length)
{
length = -1;
return false;
}
protected override Task SerializeToStreamAsync(Stream stream, TransportContext context)
{
Stream editedStream = null;
if (encodingType == "gzip")
{
editedStream = new GZipStream(stream, CompressionMode.Compress, leaveOpen: true);
}
else if (encodingType == "deflate")
{
editedStream = new DeflateStream(stream, CompressionMode.Compress, leaveOpen: true);
}
return originalContent.CopyToAsync(editedStream).ContinueWith(tsk =>
{
if (editedStream != null)
{
editedStream.Dispose();
}
});
}
}
您是否試圖編寫任何代碼來處理此問題? – McStuffins