-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Do not set HttpRequestMessage content when no PostData #3925
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This commit changes the HttpConnection to not set Content on HttpRequestMessage when there is no PostData. The check is performed inside of Request and RequestAsync to avoid creating any content instance and allocations. Change length to default in TryComputeLength to match HttpContent implementation. Pass RequestData through to _onStreamAvailable delegates so that HttpCompression, ConnectionSettings and PostData can be accessed on the passed instance. Fixes #3907
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I left some comments on changes made that differ from the reference implementations RequestDataContent
is based on.
@@ -92,7 +91,7 @@ protected override async Task SerializeToStreamAsync(Stream stream, TransportCon | |||
protected override bool TryComputeLength(out long length) | |||
{ | |||
// We can't know the length of the content being pushed to the output stream. | |||
length = -1; | |||
length = default; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
-1
was taken from: https://github.com/aspnet/AspNetWebStack/blob/master/src/System.Net.Http.Formatting/PushStreamContent.cs#L128
which RequestDataContent
is modeled after
public override void Close() | ||
{ | ||
_serializeToStreamTask.TrySetResult(true); | ||
base.Close(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We don't call close here because PushStreamContent
does not either
@@ -195,6 +197,8 @@ protected override void Dispose(bool disposing) | |||
public override void EndWrite(IAsyncResult asyncResult) => _innerStream.EndWrite(asyncResult); | |||
|
|||
public override void WriteByte(byte value) => _innerStream.WriteByte(value); | |||
|
|||
public override void Close() => _innerStream.Close(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
https://github.com/dotnet/corefx/blob/master/src/Common/src/System/IO/DelegatingStream.cs
Does not implement this, I think its good to have though.
[I] | ||
public void NotUsingSocketsHttpHandlerDoesNotCauseException() | ||
{ | ||
AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add comment this is safe to do because IntrusiveOperationCluster
runs with max concurrency of 1
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed via Zoom, approved with changes
This commit changes the HttpConnection to not set Content on HttpRequestMessage when there is no PostData. The check is performed inside of Request and RequestAsync to avoid creating any content instance and allocations. Pass RequestData through to _onStreamAvailable delegates so that HttpCompression, ConnectionSettings and PostData can be accessed on the passed instance. Fixes #3907 (cherry picked from commit 90c2bf7)
This commit changes the HttpConnection to not set Content on HttpRequestMessage when there is no PostData. The check is performed inside of Request and RequestAsync to avoid creating any content instance and allocations. Pass RequestData through to _onStreamAvailable delegates so that HttpCompression, ConnectionSettings and PostData can be accessed on the passed instance. Fixes #3907 (cherry picked from commit 90c2bf7)
This commit changes the HttpConnection to not set Content on HttpRequestMessage when there is no PostData. The check is performed inside of Request and RequestAsync to avoid creating any content instance and allocations. Pass RequestData through to _onStreamAvailable delegates so that HttpCompression, ConnectionSettings and PostData can be accessed on the passed instance. Fixes #3907 (cherry picked from commit 90c2bf7)
This commit changes the HttpConnection to not set Content on HttpRequestMessage when there is no PostData. The check is performed inside of Request and RequestAsync to avoid creating any content instance and allocations.
Change length to default in TryComputeLength to match HttpContent implementation.
Pass RequestData through to _onStreamAvailable delegates so that HttpCompression, ConnectionSettings and PostData can be accessed on the passed instance.
Fixes #3907