[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]
|
[NonAction]
|
||||||
public virtual OkObjectResult Ok(object value)
|
public virtual OkObjectResult Ok(object value)
|
||||||
{
|
{
|
||||||
var disposableValue = value as IDisposable;
|
|
||||||
if (disposableValue != null)
|
|
||||||
{
|
|
||||||
Response.RegisterForDispose(disposableValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new OkObjectResult(value);
|
return new OkObjectResult(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -674,11 +668,6 @@ namespace Microsoft.AspNetCore.Mvc
|
||||||
[NonAction]
|
[NonAction]
|
||||||
public virtual FileStreamResult File(Stream fileStream, string contentType, string fileDownloadName)
|
public virtual FileStreamResult File(Stream fileStream, string contentType, string fileDownloadName)
|
||||||
{
|
{
|
||||||
if (fileStream != null)
|
|
||||||
{
|
|
||||||
Response.RegisterForDispose(fileStream);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new FileStreamResult(fileStream, contentType) { FileDownloadName = fileDownloadName };
|
return new FileStreamResult(fileStream, contentType) { FileDownloadName = fileDownloadName };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -768,12 +757,6 @@ namespace Microsoft.AspNetCore.Mvc
|
||||||
[NonAction]
|
[NonAction]
|
||||||
public virtual NotFoundObjectResult NotFound(object value)
|
public virtual NotFoundObjectResult NotFound(object value)
|
||||||
{
|
{
|
||||||
var disposableValue = value as IDisposable;
|
|
||||||
if (disposableValue != null)
|
|
||||||
{
|
|
||||||
Response.RegisterForDispose(disposableValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new NotFoundObjectResult(value);
|
return new NotFoundObjectResult(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -794,12 +777,6 @@ namespace Microsoft.AspNetCore.Mvc
|
||||||
[NonAction]
|
[NonAction]
|
||||||
public virtual BadRequestObjectResult BadRequest(object error)
|
public virtual BadRequestObjectResult BadRequest(object error)
|
||||||
{
|
{
|
||||||
var disposableValue = error as IDisposable;
|
|
||||||
if (disposableValue != null)
|
|
||||||
{
|
|
||||||
Response.RegisterForDispose(disposableValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new BadRequestObjectResult(error);
|
return new BadRequestObjectResult(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -832,12 +809,6 @@ namespace Microsoft.AspNetCore.Mvc
|
||||||
throw new ArgumentNullException(nameof(uri));
|
throw new ArgumentNullException(nameof(uri));
|
||||||
}
|
}
|
||||||
|
|
||||||
var disposableValue = value as IDisposable;
|
|
||||||
if (disposableValue != null)
|
|
||||||
{
|
|
||||||
Response.RegisterForDispose(disposableValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new CreatedResult(uri, value);
|
return new CreatedResult(uri, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -855,12 +826,6 @@ namespace Microsoft.AspNetCore.Mvc
|
||||||
throw new ArgumentNullException(nameof(uri));
|
throw new ArgumentNullException(nameof(uri));
|
||||||
}
|
}
|
||||||
|
|
||||||
var disposableValue = value as IDisposable;
|
|
||||||
if (disposableValue != null)
|
|
||||||
{
|
|
||||||
Response.RegisterForDispose(disposableValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new CreatedResult(uri, value);
|
return new CreatedResult(uri, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -904,12 +869,6 @@ namespace Microsoft.AspNetCore.Mvc
|
||||||
object routeValues,
|
object routeValues,
|
||||||
object value)
|
object value)
|
||||||
{
|
{
|
||||||
var disposableValue = value as IDisposable;
|
|
||||||
if (disposableValue != null)
|
|
||||||
{
|
|
||||||
Response.RegisterForDispose(disposableValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new CreatedAtActionResult(actionName, controllerName, routeValues, value);
|
return new CreatedAtActionResult(actionName, controllerName, routeValues, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -947,12 +906,6 @@ namespace Microsoft.AspNetCore.Mvc
|
||||||
[NonAction]
|
[NonAction]
|
||||||
public virtual CreatedAtRouteResult CreatedAtRoute(string routeName, object routeValues, object value)
|
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);
|
return new CreatedAtRouteResult(routeName, routeValues, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -293,12 +293,6 @@ namespace Microsoft.AspNetCore.Mvc
|
||||||
[NonAction]
|
[NonAction]
|
||||||
public virtual JsonResult Json(object data)
|
public virtual JsonResult Json(object data)
|
||||||
{
|
{
|
||||||
var disposableValue = data as IDisposable;
|
|
||||||
if (disposableValue != null)
|
|
||||||
{
|
|
||||||
Response.RegisterForDispose(disposableValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new JsonResult(data);
|
return new JsonResult(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -321,12 +315,6 @@ namespace Microsoft.AspNetCore.Mvc
|
||||||
throw new ArgumentNullException(nameof(serializerSettings));
|
throw new ArgumentNullException(nameof(serializerSettings));
|
||||||
}
|
}
|
||||||
|
|
||||||
var disposableValue = data as IDisposable;
|
|
||||||
if (disposableValue != null)
|
|
||||||
{
|
|
||||||
Response.RegisterForDispose(disposableValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new JsonResult(data, serializerSettings);
|
return new JsonResult(data, serializerSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -449,32 +449,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
||||||
Assert.Equal(uri.OriginalString, result.Location);
|
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]
|
[Fact]
|
||||||
public void CreatedAtAction_WithParameterActionName_SetsResultActionName()
|
public void CreatedAtAction_WithParameterActionName_SetsResultActionName()
|
||||||
{
|
{
|
||||||
|
|
@ -535,31 +509,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
||||||
Assert.Equal(expected, result.RouteValues);
|
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]
|
[Fact]
|
||||||
public void CreatedAtRoute_WithParameterRouteName_SetsResultSameRouteName()
|
public void CreatedAtRoute_WithParameterRouteName_SetsResultSameRouteName()
|
||||||
{
|
{
|
||||||
|
|
@ -617,31 +566,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
||||||
Assert.Equal(expected, result.RouteValues);
|
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]
|
[Fact]
|
||||||
public void File_WithContents()
|
public void File_WithContents()
|
||||||
{
|
{
|
||||||
|
|
@ -737,7 +661,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var mockHttpContext = new Mock<HttpContext>();
|
var mockHttpContext = new Mock<HttpContext>();
|
||||||
mockHttpContext.Setup(x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()));
|
|
||||||
|
|
||||||
var controller = new TestableController();
|
var controller = new TestableController();
|
||||||
controller.ControllerContext.HttpContext = mockHttpContext.Object;
|
controller.ControllerContext.HttpContext = mockHttpContext.Object;
|
||||||
|
|
@ -752,9 +675,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
||||||
Assert.Same(fileStream, result.FileStream);
|
Assert.Same(fileStream, result.FileStream);
|
||||||
Assert.Equal("application/pdf", result.ContentType.ToString());
|
Assert.Equal("application/pdf", result.ContentType.ToString());
|
||||||
Assert.Equal("someDownloadName", result.FileDownloadName);
|
Assert.Equal("someDownloadName", result.FileDownloadName);
|
||||||
mockHttpContext.Verify(
|
|
||||||
x => x.Response.RegisterForDispose(It.IsAny<IDisposable>()),
|
|
||||||
Times.Once());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -800,30 +720,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
||||||
Assert.Equal("Test Content", result.Value);
|
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]
|
[Fact]
|
||||||
public void Ok_SetsStatusCode()
|
public void Ok_SetsStatusCode()
|
||||||
{
|
{
|
||||||
|
|
@ -838,30 +734,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
||||||
Assert.Equal(StatusCodes.Status200OK, result.StatusCode);
|
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]
|
[Fact]
|
||||||
public void BadRequest_SetsStatusCode()
|
public void BadRequest_SetsStatusCode()
|
||||||
{
|
{
|
||||||
|
|
@ -892,30 +764,6 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
|
||||||
Assert.Equal(obj, result.Value);
|
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]
|
[Fact]
|
||||||
public void BadRequest_SetsStatusCodeAndValue_ModelState()
|
public void BadRequest_SetsStatusCodeAndValue_ModelState()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -183,53 +183,6 @@ namespace Microsoft.AspNetCore.Mvc.Test
|
||||||
Assert.Same(data, actualJsonResult.Value);
|
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
|
// These tests share code with the ActionFilterAttribute tests because the various filter
|
||||||
// implementations need to behave the same way.
|
// implementations need to behave the same way.
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue