public async void RedirectToAction_Execute_PassesCorrectValuesToRedirect() { // Arrange var expectedUrl = "SampleAction"; var expectedPermanentFlag = false; var httpContext = new Mock <HttpContext>(); var httpResponse = new Mock <HttpResponse>(); httpContext.Setup(o => o.Response).Returns(httpResponse.Object); httpContext.Setup(o => o.RequestServices.GetService(typeof(ITempDataDictionary))) .Returns(Mock.Of <ITempDataDictionary>()); var actionContext = new ActionContext(httpContext.Object, new RouteData(), new ActionDescriptor()); var urlHelper = GetMockUrlHelper(expectedUrl); var result = new RedirectToActionResult("SampleAction", null, null) { UrlHelper = urlHelper, }; // Act await result.ExecuteResultAsync(actionContext); // Assert // Verifying if Redirect was called with the specific Url and parameter flag. // Thus we verify that the Url returned by UrlHelper is passed properly to // Redirect method and that the method is called exactly once. httpResponse.Verify(r => r.Redirect(expectedUrl, expectedPermanentFlag), Times.Exactly(1)); }
public async void RedirectToAction_Execute_PassesCorrectValuesToRedirect() { // Arrange var expectedUrl = "SampleAction"; var expectedPermanentFlag = false; var httpContext = new Mock<HttpContext>(); var httpResponse = new Mock<HttpResponse>(); httpContext.Setup(o => o.Response).Returns(httpResponse.Object); httpContext.Setup(o => o.RequestServices.GetService(typeof(ITempDataDictionary))) .Returns(Mock.Of<ITempDataDictionary>()); var actionContext = new ActionContext(httpContext.Object, new RouteData(), new ActionDescriptor()); var urlHelper = GetMockUrlHelper(expectedUrl); var result = new RedirectToActionResult("SampleAction", null, null) { UrlHelper = urlHelper, }; // Act await result.ExecuteResultAsync(actionContext); // Assert // Verifying if Redirect was called with the specific Url and parameter flag. // Thus we verify that the Url returned by UrlHelper is passed properly to // Redirect method and that the method is called exactly once. httpResponse.Verify(r => r.Redirect(expectedUrl, expectedPermanentFlag), Times.Exactly(1)); }
public async Task RedirectToAction_Execute_WithFragment_PassesCorrectValuesToRedirect() { // Arrange var expectedUrl = "/Home/SampleAction#test"; var expectedStatusCode = StatusCodes.Status302Found; var httpContext = new DefaultHttpContext { RequestServices = CreateServices().BuildServiceProvider(), }; var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); var urlHelper = GetMockUrlHelper(expectedUrl); var result = new RedirectToActionResult("SampleAction", "Home", null, false, "test") { UrlHelper = urlHelper, }; // Act await result.ExecuteResultAsync(actionContext); // Assert Assert.Equal(expectedStatusCode, httpContext.Response.StatusCode); Assert.Equal(expectedUrl, httpContext.Response.Headers["Location"]); }
public async Task RedirectToAction_Execute_ThrowsOnNullUrl() { // Arrange var httpContext = new Mock <HttpContext>(); httpContext .Setup(o => o.Response) .Returns(new Mock <HttpResponse>().Object); httpContext .SetupGet(o => o.RequestServices) .Returns(CreateServices().BuildServiceProvider()); var actionContext = new ActionContext(httpContext.Object, new RouteData(), new ActionDescriptor()); var urlHelper = GetMockUrlHelper(returnValue: null); var result = new RedirectToActionResult(null, null, null) { UrlHelper = urlHelper, }; // Act & Assert await ExceptionAssert.ThrowsAsync <InvalidOperationException>( async() => { await result.ExecuteResultAsync(actionContext); }, "No route matches the supplied values."); }
public async Task Invoke(HttpContext context) { try { await next(context); } catch (Exception ex) { var request = context.Request; UriBuilder uriBuilder = new UriBuilder(); uriBuilder.Scheme = request.Scheme; uriBuilder.Host = request.Host.Host; if (request.Host.Port.HasValue) { uriBuilder.Port = request.Host.Port.Value; } uriBuilder.Path = "Home/Error"; var url = uriBuilder.Uri; // var result = new RedirectResult(url.AbsolutePath); // // string message = ex.Message; // ErrorViewModel errModel = new ErrorViewModel(); errModel.Message = ex.Message; // var tempData = temDataFactory.GetTempData(context); //TODO need to remove magic string --- but also probably just need //to remove this whole temp data thing. prod users won't nee to see the details // tempData["error"] = ex.Message; // tempData.Save(); var result = new RedirectToActionResult("Error", "Home", errModel); //var result = new RedirectToActionResult("Error", "Home", null); RouteData routeData = context.GetRouteData(); if (routeData == null) { routeData = new RouteData(); } ActionDescriptor actionDescriptor = new ActionDescriptor(); ActionContext actionContext = new ActionContext(context, routeData, actionDescriptor); await result.ExecuteResultAsync(actionContext); } }
public void RedirectToAction_Execute_ThrowsOnNullUrl() { // Arrange var httpContext = new Mock<HttpContext>(); httpContext.Setup(o => o.Response).Returns(new Mock<HttpResponse>().Object); var actionContext = new ActionContext(httpContext.Object, new RouteData(), new ActionDescriptor()); IUrlHelper urlHelper = GetMockUrlHelper(returnValue: null); RedirectToActionResult result = new RedirectToActionResult(urlHelper, null, null, null); // Act & Assert ExceptionAssert.ThrowsAsync<InvalidOperationException>( async () => { await result.ExecuteResultAsync(actionContext); }, "No route matches the supplied values."); }
public void RedirectToAction_Execute_ThrowsOnNullUrl() { // Arrange var httpContext = new Mock <HttpContext>(); httpContext.Setup(o => o.Response).Returns(new Mock <HttpResponse>().Object); var actionContext = new ActionContext(httpContext.Object, new RouteData(), new ActionDescriptor()); IUrlHelper urlHelper = GetMockUrlHelper(returnValue: null); RedirectToActionResult result = new RedirectToActionResult(urlHelper, null, null, null); // Act & Assert ExceptionAssert.ThrowsAsync <InvalidOperationException>( async() => { await result.ExecuteResultAsync(actionContext); }, "No route matches the supplied values."); }