[Fixes 4509] Stop registering disposable objects in our controller helper methods
This commit is contained in:
parent
d87d8283d0
commit
d9aacd0f87
|
|
@ -347,12 +347,6 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
[NonAction]
|
||||
public virtual OkObjectResult Ok(object value)
|
||||
{
|
||||
var disposableValue = value as IDisposable;
|
||||
if (disposableValue != null)
|
||||
{
|
||||
Response.RegisterForDispose(disposableValue);
|
||||
}
|
||||
|
||||
return new OkObjectResult(value);
|
||||
}
|
||||
|
||||
|
|
@ -674,11 +668,6 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
[NonAction]
|
||||
public virtual FileStreamResult File(Stream fileStream, string contentType, string fileDownloadName)
|
||||
{
|
||||
if (fileStream != null)
|
||||
{
|
||||
Response.RegisterForDispose(fileStream);
|
||||
}
|
||||
|
||||
return new FileStreamResult(fileStream, contentType) { FileDownloadName = fileDownloadName };
|
||||
}
|
||||
|
||||
|
|
@ -768,12 +757,6 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
[NonAction]
|
||||
public virtual NotFoundObjectResult NotFound(object value)
|
||||
{
|
||||
var disposableValue = value as IDisposable;
|
||||
if (disposableValue != null)
|
||||
{
|
||||
Response.RegisterForDispose(disposableValue);
|
||||
}
|
||||
|
||||
return new NotFoundObjectResult(value);
|
||||
}
|
||||
|
||||
|
|
@ -794,12 +777,6 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
[NonAction]
|
||||
public virtual BadRequestObjectResult BadRequest(object error)
|
||||
{
|
||||
var disposableValue = error as IDisposable;
|
||||
if (disposableValue != null)
|
||||
{
|
||||
Response.RegisterForDispose(disposableValue);
|
||||
}
|
||||
|
||||
return new BadRequestObjectResult(error);
|
||||
}
|
||||
|
||||
|
|
@ -832,12 +809,6 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
throw new ArgumentNullException(nameof(uri));
|
||||
}
|
||||
|
||||
var disposableValue = value as IDisposable;
|
||||
if (disposableValue != null)
|
||||
{
|
||||
Response.RegisterForDispose(disposableValue);
|
||||
}
|
||||
|
||||
return new CreatedResult(uri, value);
|
||||
}
|
||||
|
||||
|
|
@ -855,12 +826,6 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
throw new ArgumentNullException(nameof(uri));
|
||||
}
|
||||
|
||||
var disposableValue = value as IDisposable;
|
||||
if (disposableValue != null)
|
||||
{
|
||||
Response.RegisterForDispose(disposableValue);
|
||||
}
|
||||
|
||||
return new CreatedResult(uri, value);
|
||||
}
|
||||
|
||||
|
|
@ -904,12 +869,6 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
object routeValues,
|
||||
object value)
|
||||
{
|
||||
var disposableValue = value as IDisposable;
|
||||
if (disposableValue != null)
|
||||
{
|
||||
Response.RegisterForDispose(disposableValue);
|
||||
}
|
||||
|
||||
return new CreatedAtActionResult(actionName, controllerName, routeValues, value);
|
||||
}
|
||||
|
||||
|
|
@ -947,12 +906,6 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
[NonAction]
|
||||
public virtual CreatedAtRouteResult CreatedAtRoute(string routeName, object routeValues, object value)
|
||||
{
|
||||
var disposableValue = value as IDisposable;
|
||||
if (disposableValue != null)
|
||||
{
|
||||
Response.RegisterForDispose(disposableValue);
|
||||
}
|
||||
|
||||
return new CreatedAtRouteResult(routeName, routeValues, value);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -293,12 +293,6 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
[NonAction]
|
||||
public virtual JsonResult Json(object data)
|
||||
{
|
||||
var disposableValue = data as IDisposable;
|
||||
if (disposableValue != null)
|
||||
{
|
||||
Response.RegisterForDispose(disposableValue);
|
||||
}
|
||||
|
||||
return new JsonResult(data);
|
||||
}
|
||||
|
||||
|
|
@ -321,12 +315,6 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
throw new ArgumentNullException(nameof(serializerSettings));
|
||||
}
|
||||
|
||||
var disposableValue = data as IDisposable;
|
||||
if (disposableValue != null)
|
||||
{
|
||||
Response.RegisterForDispose(disposableValue);
|
||||
}
|
||||
|
||||
return new JsonResult(data, serializerSettings);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -449,32 +449,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
|||
Assert.Equal(uri.OriginalString, result.Location);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Created_IDisposableObject_RegistersForDispose()
|
||||
{
|
||||
// Arrange
|
||||
var mockHttpContext = new Mock<HttpContext>();
|
||||
mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()));
|
||||
var uri = new Uri("/test/url", UriKind.Relative);
|
||||
|
||||
var controller = new TestableController();
|
||||
controller.ControllerContext.HttpContext = mockHttpContext.Object;
|
||||
|
||||
var input = new DisposableObject();
|
||||
|
||||
// Act
|
||||
var result = controller.Created(uri, input);
|
||||
|
||||
// Assert
|
||||
Assert.IsType<CreatedResult>(result);
|
||||
Assert.Equal(StatusCodes.Status201Created, result.StatusCode);
|
||||
Assert.Equal(uri.OriginalString, result.Location);
|
||||
Assert.Same(input, result.Value);
|
||||
mockHttpContext.Verify(
|
||||
x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()),
|
||||
Times.Once());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CreatedAtAction_WithParameterActionName_SetsResultActionName()
|
||||
{
|
||||
|
|
@ -535,31 +509,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
|||
Assert.Equal(expected, result.RouteValues);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CreatedAtAction_IDisposableObject_RegistersForDispose()
|
||||
{
|
||||
// Arrange
|
||||
var mockHttpContext = new Mock<HttpContext>();
|
||||
mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()));
|
||||
|
||||
var controller = new TestableController();
|
||||
controller.ControllerContext.HttpContext = mockHttpContext.Object;
|
||||
|
||||
var input = new DisposableObject();
|
||||
|
||||
// Act
|
||||
var result = controller.CreatedAtAction("SampleAction", input);
|
||||
|
||||
// Assert
|
||||
Assert.IsType<CreatedAtActionResult>(result);
|
||||
Assert.Equal(StatusCodes.Status201Created, result.StatusCode);
|
||||
Assert.Equal("SampleAction", result.ActionName);
|
||||
Assert.Same(input, result.Value);
|
||||
mockHttpContext.Verify(
|
||||
x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()),
|
||||
Times.Once());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CreatedAtRoute_WithParameterRouteName_SetsResultSameRouteName()
|
||||
{
|
||||
|
|
@ -617,31 +566,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
|||
Assert.Equal(expected, result.RouteValues);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CreatedAtRoute_IDisposableObject_RegistersForDispose()
|
||||
{
|
||||
// Arrange
|
||||
var mockHttpContext = new Mock<HttpContext>();
|
||||
mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()));
|
||||
|
||||
var controller = new TestableController();
|
||||
controller.ControllerContext.HttpContext = mockHttpContext.Object;
|
||||
|
||||
var input = new DisposableObject();
|
||||
|
||||
// Act
|
||||
var result = controller.CreatedAtRoute("SampleRoute", input);
|
||||
|
||||
// Assert
|
||||
Assert.IsType<CreatedAtRouteResult>(result);
|
||||
Assert.Equal(StatusCodes.Status201Created, result.StatusCode);
|
||||
Assert.Equal("SampleRoute", result.RouteName);
|
||||
Assert.Same(input, result.Value);
|
||||
mockHttpContext.Verify(
|
||||
x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()),
|
||||
Times.Once());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void File_WithContents()
|
||||
{
|
||||
|
|
@ -737,7 +661,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
|||
{
|
||||
// Arrange
|
||||
var mockHttpContext = new Mock<HttpContext>();
|
||||
mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()));
|
||||
|
||||
var controller = new TestableController();
|
||||
controller.ControllerContext.HttpContext = mockHttpContext.Object;
|
||||
|
|
@ -752,9 +675,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
|||
Assert.Same(fileStream, result.FileStream);
|
||||
Assert.Equal("application/pdf", result.ContentType.ToString());
|
||||
Assert.Equal("someDownloadName", result.FileDownloadName);
|
||||
mockHttpContext.Verify(
|
||||
x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()),
|
||||
Times.Once());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -800,30 +720,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
|||
Assert.Equal("Test Content", result.Value);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void HttpNotFound_IDisposableObject_RegistersForDispose()
|
||||
{
|
||||
// Arrange
|
||||
var mockHttpContext = new Mock<HttpContext>();
|
||||
mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()));
|
||||
|
||||
var controller = new TestableController();
|
||||
controller.ControllerContext.HttpContext = mockHttpContext.Object;
|
||||
|
||||
var input = new DisposableObject();
|
||||
|
||||
// Act
|
||||
var result = controller.NotFound(input);
|
||||
|
||||
// Assert
|
||||
Assert.IsType<NotFoundObjectResult>(result);
|
||||
Assert.Equal(StatusCodes.Status404NotFound, result.StatusCode);
|
||||
Assert.Same(input, result.Value);
|
||||
mockHttpContext.Verify(
|
||||
x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()),
|
||||
Times.Once());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Ok_SetsStatusCode()
|
||||
{
|
||||
|
|
@ -838,30 +734,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
|||
Assert.Equal(StatusCodes.Status200OK, result.StatusCode);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Ok_WithIDisposableObject_RegistersForDispose()
|
||||
{
|
||||
// Arrange
|
||||
var mockHttpContext = new Mock<HttpContext>();
|
||||
mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()));
|
||||
|
||||
var controller = new TestableController();
|
||||
controller.ControllerContext.HttpContext = mockHttpContext.Object;
|
||||
|
||||
var input = new DisposableObject();
|
||||
|
||||
// Act
|
||||
var result = controller.Ok(input);
|
||||
|
||||
// Assert
|
||||
Assert.IsType<OkObjectResult>(result);
|
||||
Assert.Equal(StatusCodes.Status200OK, result.StatusCode);
|
||||
Assert.Same(input, result.Value);
|
||||
mockHttpContext.Verify(
|
||||
x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()),
|
||||
Times.Once());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void BadRequest_SetsStatusCode()
|
||||
{
|
||||
|
|
@ -892,30 +764,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
|||
Assert.Equal(obj, result.Value);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void BadRequest_IDisposableObject_RegistersForDispose()
|
||||
{
|
||||
// Arrange
|
||||
var mockHttpContext = new Mock<HttpContext>();
|
||||
mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()));
|
||||
|
||||
var controller = new TestableController();
|
||||
controller.ControllerContext.HttpContext = mockHttpContext.Object;
|
||||
|
||||
var input = new DisposableObject();
|
||||
|
||||
// Act
|
||||
var result = controller.BadRequest(input);
|
||||
|
||||
// Assert
|
||||
Assert.IsType<BadRequestObjectResult>(result);
|
||||
Assert.Equal(StatusCodes.Status400BadRequest, result.StatusCode);
|
||||
Assert.Same(input, result.Value);
|
||||
mockHttpContext.Verify(
|
||||
x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()),
|
||||
Times.Once());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void BadRequest_SetsStatusCodeAndValue_ModelState()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -183,53 +183,6 @@ namespace Microsoft.AspNetCore.Mvc.Test
|
|||
Assert.Same(data, actualJsonResult.Value);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Controller_Json_IDisposableObject_RegistersForDispose()
|
||||
{
|
||||
// Arrange
|
||||
var mockHttpContext = new Mock<HttpContext>();
|
||||
mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()));
|
||||
|
||||
var controller = new TestableController();
|
||||
controller.ControllerContext.HttpContext = mockHttpContext.Object;
|
||||
|
||||
var input = new DisposableObject();
|
||||
|
||||
// Act
|
||||
var result = controller.Json(input);
|
||||
|
||||
// Assert
|
||||
Assert.IsType<JsonResult>(result);
|
||||
Assert.Same(input, result.Value);
|
||||
mockHttpContext.Verify(
|
||||
x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()),
|
||||
Times.Once());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Controller_JsonWithParameterValueAndSerializerSettings_IDisposableObject_RegistersForDispose()
|
||||
{
|
||||
// Arrange
|
||||
var mockHttpContext = new Mock<HttpContext>();
|
||||
mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()));
|
||||
|
||||
var controller = new TestableController();
|
||||
controller.ControllerContext.HttpContext = mockHttpContext.Object;
|
||||
|
||||
var input = new DisposableObject();
|
||||
var serializerSettings = new JsonSerializerSettings();
|
||||
|
||||
// Act
|
||||
var result = controller.Json(input, serializerSettings);
|
||||
|
||||
// Assert
|
||||
Assert.IsType<JsonResult>(result);
|
||||
Assert.Same(input, result.Value);
|
||||
mockHttpContext.Verify(
|
||||
x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()),
|
||||
Times.Once());
|
||||
}
|
||||
|
||||
// These tests share code with the ActionFilterAttribute tests because the various filter
|
||||
// implementations need to behave the same way.
|
||||
[Fact]
|
||||
|
|
|
|||
Loading…
Reference in New Issue