Add clearer exception message to HttpResponseStream ODE (#2305)

This commit is contained in:
Joshua Clark 2018-02-08 20:28:00 -05:00 committed by Stephen Halter
parent 8f25c4e8ca
commit 5dd590e75e
4 changed files with 14 additions and 2 deletions

View File

@ -500,4 +500,7 @@ For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?l
<data name="Http2NotSupported" xml:space="preserve">
<value>HTTP/2 support is experimental, see https://go.microsoft.com/fwlink/?linkid=866785 to enable it.</value>
</data>
<data name="WritingToResponseBodyAfterResponseCompleted" xml:space="preserve">
<value>Cannot write to the response body, the response has completed.</value>
</data>
</root>

View File

@ -158,7 +158,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http
}
break;
case HttpStreamState.Closed:
throw new ObjectDisposedException(nameof(HttpResponseStream));
throw new ObjectDisposedException(nameof(HttpResponseStream), CoreStrings.WritingToResponseBodyAfterResponseCompleted);
case HttpStreamState.Aborted:
if (cancellationToken.IsCancellationRequested)
{

View File

@ -878,6 +878,14 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core
internal static string FormatWritingToResponseBodyNotSupported(object statusCode)
=> string.Format(CultureInfo.CurrentCulture, GetString("WritingToResponseBodyNotSupported", "statusCode"), statusCode);
/// <summary>
/// Cannot write to the response body, the response has completed.
/// </summary>
internal static string WritingToResponseBodyAfterResponseCompleted
{
get => GetString("WritingToResponseBodyAfterResponseCompleted");
}
/// <summary>
/// Connection shutdown abnormally.
/// </summary>

View File

@ -99,7 +99,8 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Core.Tests
var stream = new HttpResponseStream(Mock.Of<IHttpBodyControlFeature>(), Mock.Of<IHttpResponseControl>());
stream.StartAcceptingWrites();
stream.StopAcceptingWrites();
Assert.Throws<ObjectDisposedException>(() => { stream.WriteAsync(new byte[1], 0, 1); });
var ex = Assert.Throws<ObjectDisposedException>(() => { stream.WriteAsync(new byte[1], 0, 1); });
Assert.Contains(CoreStrings.WritingToResponseBodyAfterResponseCompleted, ex.Message);
}
[Fact]