Add logging to ActionResults and ControllerActionInvoker
This commit is contained in:
parent
5bb9759166
commit
da731fc641
|
|
@ -5,6 +5,9 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNet.Http.Authentication;
|
using Microsoft.AspNet.Http.Authentication;
|
||||||
|
using Microsoft.AspNet.Mvc.Logging;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc
|
namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
|
|
@ -52,18 +55,23 @@ namespace Microsoft.AspNet.Mvc
|
||||||
throw new ArgumentNullException(nameof(context));
|
throw new ArgumentNullException(nameof(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
var auth = context.HttpContext.Authentication;
|
var loggerFactory = context.HttpContext.RequestServices.GetRequiredService<ILoggerFactory>();
|
||||||
|
var logger = loggerFactory.CreateLogger<ChallengeResult>();
|
||||||
|
|
||||||
|
var authentication = context.HttpContext.Authentication;
|
||||||
if (AuthenticationSchemes.Count > 0)
|
if (AuthenticationSchemes.Count > 0)
|
||||||
{
|
{
|
||||||
foreach (var scheme in AuthenticationSchemes)
|
foreach (var scheme in AuthenticationSchemes)
|
||||||
{
|
{
|
||||||
await auth.ChallengeAsync(scheme, Properties);
|
await authentication.ChallengeAsync(scheme, Properties);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await auth.ChallengeAsync(Properties);
|
await authentication.ChallengeAsync(Properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logger.ChallengeResultExecuting(AuthenticationSchemes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,9 @@ using System.Threading.Tasks;
|
||||||
using Microsoft.AspNet.Http;
|
using Microsoft.AspNet.Http;
|
||||||
using Microsoft.AspNet.Http.Features;
|
using Microsoft.AspNet.Http.Features;
|
||||||
using Microsoft.AspNet.Mvc.Internal;
|
using Microsoft.AspNet.Mvc.Internal;
|
||||||
|
using Microsoft.AspNet.Mvc.Logging;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc
|
namespace Microsoft.AspNet.Mvc
|
||||||
|
|
@ -40,6 +43,9 @@ namespace Microsoft.AspNet.Mvc
|
||||||
throw new ArgumentNullException(nameof(context));
|
throw new ArgumentNullException(nameof(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var loggerFactory = context.HttpContext.RequestServices.GetRequiredService<ILoggerFactory>();
|
||||||
|
var logger = loggerFactory.CreateLogger<ContentResult>();
|
||||||
|
|
||||||
var response = context.HttpContext.Response;
|
var response = context.HttpContext.Response;
|
||||||
var contentTypeHeader = ContentType;
|
var contentTypeHeader = ContentType;
|
||||||
|
|
||||||
|
|
@ -59,6 +65,8 @@ namespace Microsoft.AspNet.Mvc
|
||||||
response.StatusCode = StatusCode.Value;
|
response.StatusCode = StatusCode.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logger.ContentResultExecuting(contentTypeHeader);
|
||||||
|
|
||||||
if (Content != null)
|
if (Content != null)
|
||||||
{
|
{
|
||||||
var bufferingFeature = response.HttpContext.Features.Get<IHttpBufferingFeature>();
|
var bufferingFeature = response.HttpContext.Features.Get<IHttpBufferingFeature>();
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,7 @@ namespace Microsoft.AspNet.Mvc.Controllers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static object[] PrepareArguments(
|
public static object[] PrepareArguments(
|
||||||
IDictionary<string, object> actionParameters,
|
IDictionary<string, object> actionParameters,
|
||||||
ParameterInfo[] declaredParameterInfos)
|
ParameterInfo[] declaredParameterInfos)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ using Microsoft.AspNet.Mvc.Core;
|
||||||
using Microsoft.AspNet.Mvc.Filters;
|
using Microsoft.AspNet.Mvc.Filters;
|
||||||
using Microsoft.AspNet.Mvc.Formatters;
|
using Microsoft.AspNet.Mvc.Formatters;
|
||||||
using Microsoft.AspNet.Mvc.Infrastructure;
|
using Microsoft.AspNet.Mvc.Infrastructure;
|
||||||
|
using Microsoft.AspNet.Mvc.Logging;
|
||||||
using Microsoft.AspNet.Mvc.ModelBinding;
|
using Microsoft.AspNet.Mvc.ModelBinding;
|
||||||
using Microsoft.AspNet.Mvc.ModelBinding.Validation;
|
using Microsoft.AspNet.Mvc.ModelBinding.Validation;
|
||||||
using Microsoft.Extensions.Internal;
|
using Microsoft.Extensions.Internal;
|
||||||
|
|
@ -144,14 +145,23 @@ namespace Microsoft.AspNet.Mvc.Controllers
|
||||||
protected override async Task<IActionResult> InvokeActionAsync(ActionExecutingContext actionExecutingContext)
|
protected override async Task<IActionResult> InvokeActionAsync(ActionExecutingContext actionExecutingContext)
|
||||||
{
|
{
|
||||||
var actionMethodInfo = _descriptor.MethodInfo;
|
var actionMethodInfo = _descriptor.MethodInfo;
|
||||||
|
var arguments = ControllerActionExecutor.PrepareArguments(
|
||||||
|
actionExecutingContext.ActionArguments,
|
||||||
|
actionMethodInfo.GetParameters());
|
||||||
|
|
||||||
|
Logger.ActionMethodExecuting(actionExecutingContext, arguments);
|
||||||
|
|
||||||
var actionReturnValue = await ControllerActionExecutor.ExecuteAsync(
|
var actionReturnValue = await ControllerActionExecutor.ExecuteAsync(
|
||||||
actionMethodInfo,
|
actionMethodInfo,
|
||||||
actionExecutingContext.Controller,
|
actionExecutingContext.Controller,
|
||||||
actionExecutingContext.ActionArguments);
|
arguments);
|
||||||
|
|
||||||
var actionResult = CreateActionResult(
|
var actionResult = CreateActionResult(
|
||||||
actionMethodInfo.ReturnType,
|
actionMethodInfo.ReturnType,
|
||||||
actionReturnValue);
|
actionReturnValue);
|
||||||
|
|
||||||
|
Logger.ActionMethodExecuted(actionExecutingContext, actionResult);
|
||||||
|
|
||||||
return actionResult;
|
return actionResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,6 @@ namespace Microsoft.AspNet.Mvc.Controllers
|
||||||
private readonly IReadOnlyList<IModelValidatorProvider> _modelValidatorProviders;
|
private readonly IReadOnlyList<IModelValidatorProvider> _modelValidatorProviders;
|
||||||
private readonly IReadOnlyList<IValueProviderFactory> _valueProviderFactories;
|
private readonly IReadOnlyList<IValueProviderFactory> _valueProviderFactories;
|
||||||
private readonly IActionBindingContextAccessor _actionBindingContextAccessor;
|
private readonly IActionBindingContextAccessor _actionBindingContextAccessor;
|
||||||
private readonly ILogger _logger;
|
|
||||||
private readonly DiagnosticSource _diagnosticSource;
|
private readonly DiagnosticSource _diagnosticSource;
|
||||||
private readonly int _maxModelValidationErrors;
|
private readonly int _maxModelValidationErrors;
|
||||||
|
|
||||||
|
|
@ -132,7 +131,7 @@ namespace Microsoft.AspNet.Mvc.Controllers
|
||||||
_modelValidatorProviders = modelValidatorProviders;
|
_modelValidatorProviders = modelValidatorProviders;
|
||||||
_valueProviderFactories = valueProviderFactories;
|
_valueProviderFactories = valueProviderFactories;
|
||||||
_actionBindingContextAccessor = actionBindingContextAccessor;
|
_actionBindingContextAccessor = actionBindingContextAccessor;
|
||||||
_logger = logger;
|
Logger = logger;
|
||||||
_diagnosticSource = diagnosticSource;
|
_diagnosticSource = diagnosticSource;
|
||||||
_maxModelValidationErrors = maxModelValidationErrors;
|
_maxModelValidationErrors = maxModelValidationErrors;
|
||||||
}
|
}
|
||||||
|
|
@ -153,6 +152,8 @@ namespace Microsoft.AspNet.Mvc.Controllers
|
||||||
|
|
||||||
protected object Instance { get; private set; }
|
protected object Instance { get; private set; }
|
||||||
|
|
||||||
|
protected ILogger Logger { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Called to create an instance of an object which will act as the reciever of the action invocation.
|
/// Called to create an instance of an object which will act as the reciever of the action invocation.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -296,7 +297,7 @@ namespace Microsoft.AspNet.Mvc.Controllers
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_logger.LogWarning(AuthorizationFailureLogMessage, current.FilterAsync.GetType().FullName);
|
Logger.LogWarning(AuthorizationFailureLogMessage, current.FilterAsync.GetType().FullName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (current.Filter != null)
|
else if (current.Filter != null)
|
||||||
|
|
@ -310,7 +311,7 @@ namespace Microsoft.AspNet.Mvc.Controllers
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_logger.LogWarning(AuthorizationFailureLogMessage, current.Filter.GetType().FullName);
|
Logger.LogWarning(AuthorizationFailureLogMessage, current.Filter.GetType().FullName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -366,7 +367,7 @@ namespace Microsoft.AspNet.Mvc.Controllers
|
||||||
// If we get here then the filter didn't call 'next' indicating a short circuit
|
// If we get here then the filter didn't call 'next' indicating a short circuit
|
||||||
if (_resourceExecutingContext.Result != null)
|
if (_resourceExecutingContext.Result != null)
|
||||||
{
|
{
|
||||||
_logger.LogVerbose(
|
Logger.LogVerbose(
|
||||||
ResourceFilterShortCircuitLogMessage,
|
ResourceFilterShortCircuitLogMessage,
|
||||||
item.FilterAsync.GetType().FullName);
|
item.FilterAsync.GetType().FullName);
|
||||||
|
|
||||||
|
|
@ -387,8 +388,7 @@ namespace Microsoft.AspNet.Mvc.Controllers
|
||||||
if (_resourceExecutingContext.Result != null)
|
if (_resourceExecutingContext.Result != null)
|
||||||
{
|
{
|
||||||
// Short-circuited by setting a result.
|
// Short-circuited by setting a result.
|
||||||
|
Logger.LogVerbose(ResourceFilterShortCircuitLogMessage, item.Filter.GetType().FullName);
|
||||||
_logger.LogVerbose(ResourceFilterShortCircuitLogMessage, item.Filter.GetType().FullName);
|
|
||||||
|
|
||||||
await InvokeResultAsync(_resourceExecutingContext.Result);
|
await InvokeResultAsync(_resourceExecutingContext.Result);
|
||||||
|
|
||||||
|
|
@ -506,7 +506,7 @@ namespace Microsoft.AspNet.Mvc.Controllers
|
||||||
|
|
||||||
if (_exceptionContext.Exception == null)
|
if (_exceptionContext.Exception == null)
|
||||||
{
|
{
|
||||||
_logger.LogVerbose(
|
Logger.LogVerbose(
|
||||||
ExceptionFilterShortCircuitLogMessage,
|
ExceptionFilterShortCircuitLogMessage,
|
||||||
current.FilterAsync.GetType().FullName);
|
current.FilterAsync.GetType().FullName);
|
||||||
}
|
}
|
||||||
|
|
@ -527,7 +527,7 @@ namespace Microsoft.AspNet.Mvc.Controllers
|
||||||
|
|
||||||
if (_exceptionContext.Exception == null)
|
if (_exceptionContext.Exception == null)
|
||||||
{
|
{
|
||||||
_logger.LogVerbose(
|
Logger.LogVerbose(
|
||||||
ExceptionFilterShortCircuitLogMessage,
|
ExceptionFilterShortCircuitLogMessage,
|
||||||
current.Filter.GetType().FullName);
|
current.Filter.GetType().FullName);
|
||||||
}
|
}
|
||||||
|
|
@ -608,7 +608,7 @@ namespace Microsoft.AspNet.Mvc.Controllers
|
||||||
{
|
{
|
||||||
// If we get here then the filter didn't call 'next' indicating a short circuit
|
// If we get here then the filter didn't call 'next' indicating a short circuit
|
||||||
|
|
||||||
_logger.LogVerbose(ActionFilterShortCircuitLogMessage, item.FilterAsync.GetType().FullName);
|
Logger.LogVerbose(ActionFilterShortCircuitLogMessage, item.FilterAsync.GetType().FullName);
|
||||||
|
|
||||||
_actionExecutedContext = new ActionExecutedContext(
|
_actionExecutedContext = new ActionExecutedContext(
|
||||||
_actionExecutingContext,
|
_actionExecutingContext,
|
||||||
|
|
@ -628,7 +628,7 @@ namespace Microsoft.AspNet.Mvc.Controllers
|
||||||
{
|
{
|
||||||
// Short-circuited by setting a result.
|
// Short-circuited by setting a result.
|
||||||
|
|
||||||
_logger.LogVerbose(ActionFilterShortCircuitLogMessage, item.Filter.GetType().FullName);
|
Logger.LogVerbose(ActionFilterShortCircuitLogMessage, item.Filter.GetType().FullName);
|
||||||
|
|
||||||
_actionExecutedContext = new ActionExecutedContext(
|
_actionExecutedContext = new ActionExecutedContext(
|
||||||
_actionExecutingContext,
|
_actionExecutingContext,
|
||||||
|
|
@ -752,8 +752,7 @@ namespace Microsoft.AspNet.Mvc.Controllers
|
||||||
if (_resultExecutedContext == null || _resultExecutingContext.Cancel == true)
|
if (_resultExecutedContext == null || _resultExecutingContext.Cancel == true)
|
||||||
{
|
{
|
||||||
// Short-circuited by not calling next || Short-circuited by setting Cancel == true
|
// Short-circuited by not calling next || Short-circuited by setting Cancel == true
|
||||||
|
Logger.LogVerbose(ResourceFilterShortCircuitLogMessage, item.FilterAsync.GetType().FullName);
|
||||||
_logger.LogVerbose(ResourceFilterShortCircuitLogMessage, item.FilterAsync.GetType().FullName);
|
|
||||||
|
|
||||||
_resultExecutedContext = new ResultExecutedContext(
|
_resultExecutedContext = new ResultExecutedContext(
|
||||||
_resultExecutingContext,
|
_resultExecutingContext,
|
||||||
|
|
@ -772,8 +771,7 @@ namespace Microsoft.AspNet.Mvc.Controllers
|
||||||
if (_resultExecutingContext.Cancel == true)
|
if (_resultExecutingContext.Cancel == true)
|
||||||
{
|
{
|
||||||
// Short-circuited by setting Cancel == true
|
// Short-circuited by setting Cancel == true
|
||||||
|
Logger.LogVerbose(ResourceFilterShortCircuitLogMessage, item.Filter.GetType().FullName);
|
||||||
_logger.LogVerbose(ResourceFilterShortCircuitLogMessage, item.Filter.GetType().FullName);
|
|
||||||
|
|
||||||
_resultExecutedContext = new ResultExecutedContext(
|
_resultExecutedContext = new ResultExecutedContext(
|
||||||
_resultExecutingContext,
|
_resultExecutingContext,
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,9 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNet.Http;
|
using Microsoft.AspNet.Http;
|
||||||
|
using Microsoft.AspNet.Mvc.Logging;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc
|
namespace Microsoft.AspNet.Mvc
|
||||||
|
|
@ -67,6 +70,9 @@ namespace Microsoft.AspNet.Mvc
|
||||||
throw new ArgumentNullException(nameof(context));
|
throw new ArgumentNullException(nameof(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var loggerFactory = context.HttpContext.RequestServices.GetRequiredService<ILoggerFactory>();
|
||||||
|
var logger = loggerFactory?.CreateLogger<FileResult>();
|
||||||
|
|
||||||
var response = context.HttpContext.Response;
|
var response = context.HttpContext.Response;
|
||||||
response.ContentType = ContentType.ToString();
|
response.ContentType = ContentType.ToString();
|
||||||
|
|
||||||
|
|
@ -77,11 +83,12 @@ namespace Microsoft.AspNet.Mvc
|
||||||
// detached and stored in a separate file. If the receiving MUA writes
|
// detached and stored in a separate file. If the receiving MUA writes
|
||||||
// the entity to a file, the suggested filename should be used as a
|
// the entity to a file, the suggested filename should be used as a
|
||||||
// basis for the actual filename, where possible.
|
// basis for the actual filename, where possible.
|
||||||
var cd = new ContentDispositionHeaderValue("attachment");
|
var contentDisposition = new ContentDispositionHeaderValue("attachment");
|
||||||
cd.SetHttpFileName(FileDownloadName);
|
contentDisposition.SetHttpFileName(FileDownloadName);
|
||||||
context.HttpContext.Response.Headers[HeaderNames.ContentDisposition] = cd.ToString();
|
context.HttpContext.Response.Headers[HeaderNames.ContentDisposition] = contentDisposition.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logger.FileResultExecuting(FileDownloadName);
|
||||||
return WriteFileAsync(response);
|
return WriteFileAsync(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,9 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using Microsoft.AspNet.Mvc.Logging;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc
|
namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
|
|
@ -34,6 +37,11 @@ namespace Microsoft.AspNet.Mvc
|
||||||
throw new ArgumentNullException(nameof(context));
|
throw new ArgumentNullException(nameof(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var factory = context.HttpContext.RequestServices.GetRequiredService<ILoggerFactory>();
|
||||||
|
var logger = factory.CreateLogger<HttpStatusCodeResult>();
|
||||||
|
|
||||||
|
logger.HttpStatusCodeResultExecuting(StatusCode);
|
||||||
|
|
||||||
context.HttpContext.Response.StatusCode = StatusCode;
|
context.HttpContext.Response.StatusCode = StatusCode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ using Microsoft.AspNet.Http;
|
||||||
using Microsoft.AspNet.Mvc.Core;
|
using Microsoft.AspNet.Mvc.Core;
|
||||||
using Microsoft.AspNet.Mvc.Formatters;
|
using Microsoft.AspNet.Mvc.Formatters;
|
||||||
using Microsoft.AspNet.Mvc.Internal;
|
using Microsoft.AspNet.Mvc.Internal;
|
||||||
|
using Microsoft.AspNet.Mvc.Logging;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.OptionsModel;
|
using Microsoft.Extensions.OptionsModel;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
|
|
@ -125,7 +126,9 @@ namespace Microsoft.AspNet.Mvc.Infrastructure
|
||||||
"'{ContentType}' to write the response.",
|
"'{ContentType}' to write the response.",
|
||||||
selectedFormatter.GetType().FullName,
|
selectedFormatter.GetType().FullName,
|
||||||
formatterContext.ContentType);
|
formatterContext.ContentType);
|
||||||
|
|
||||||
|
Logger.ObjectResultExecuting(context);
|
||||||
|
|
||||||
result.OnFormatting(context);
|
result.OnFormatting(context);
|
||||||
return selectedFormatter.WriteAsync(formatterContext);
|
return selectedFormatter.WriteAsync(formatterContext);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.Logging
|
||||||
|
{
|
||||||
|
public static class ChallengeResultLoggerExtenstions
|
||||||
|
{
|
||||||
|
private static Action<ILogger, string[], Exception> _challengeResultExecuting;
|
||||||
|
|
||||||
|
static ChallengeResultLoggerExtenstions()
|
||||||
|
{
|
||||||
|
_challengeResultExecuting = LoggerMessage.Define<string[]>(
|
||||||
|
LogLevel.Information,
|
||||||
|
1,
|
||||||
|
"Executing ChallengeResult with authentication schemes ({Schemes}).");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ChallengeResultExecuting(this ILogger logger, IList<string> schemes)
|
||||||
|
{
|
||||||
|
_challengeResultExecuting(logger, schemes.ToArray(), null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Net.Http.Headers;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.Logging
|
||||||
|
{
|
||||||
|
public static class ContentResultLoggerExtensions
|
||||||
|
{
|
||||||
|
private static Action<ILogger, string, Exception> _contentResultExecuting;
|
||||||
|
|
||||||
|
static ContentResultLoggerExtensions()
|
||||||
|
{
|
||||||
|
_contentResultExecuting = LoggerMessage.Define<string>(
|
||||||
|
LogLevel.Information,
|
||||||
|
1,
|
||||||
|
"Executing ContentResult with HTTP Response ContentType of {ContentType}");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ContentResultExecuting(this ILogger logger, MediaTypeHeaderValue contentType)
|
||||||
|
{
|
||||||
|
_contentResultExecuting(logger, contentType?.MediaType, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Microsoft.AspNet.Mvc.Filters;
|
||||||
|
using Microsoft.AspNet.Mvc.ModelBinding;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.Logging
|
||||||
|
{
|
||||||
|
public static class ControllerActionInvokerLoggerExtensions
|
||||||
|
{
|
||||||
|
private static Action<ILogger, string, string[], ModelValidationState, Exception> _actionMethodExecuting;
|
||||||
|
private static Action<ILogger, string, string, Exception> _actionMethodExecuted;
|
||||||
|
|
||||||
|
static ControllerActionInvokerLoggerExtensions()
|
||||||
|
{
|
||||||
|
_actionMethodExecuting = LoggerMessage.Define<string, string[], ModelValidationState>(
|
||||||
|
LogLevel.Information,
|
||||||
|
1,
|
||||||
|
"Executing action method {ActionName} with arguments ({Arguments}) - ModelState is {ValidationState}'");
|
||||||
|
|
||||||
|
_actionMethodExecuted = LoggerMessage.Define<string, string>(
|
||||||
|
LogLevel.Information,
|
||||||
|
2,
|
||||||
|
"Executed action method {ActionName}, returned result {ActionResult}.'");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ActionMethodExecuting(this ILogger logger, ActionExecutingContext context, object[] arguments)
|
||||||
|
{
|
||||||
|
if (logger.IsEnabled(LogLevel.Information))
|
||||||
|
{
|
||||||
|
var actionName = context.ActionDescriptor.DisplayName;
|
||||||
|
|
||||||
|
string[] convertedArguments;
|
||||||
|
if (arguments == null)
|
||||||
|
{
|
||||||
|
convertedArguments = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
convertedArguments = new string[arguments.Length];
|
||||||
|
for (var i = 0; i < arguments.Length; i++)
|
||||||
|
{
|
||||||
|
convertedArguments[i] = Convert.ToString(arguments[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var validationState = context.ModelState.ValidationState;
|
||||||
|
|
||||||
|
_actionMethodExecuting(logger, actionName, convertedArguments, validationState, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ActionMethodExecuted(this ILogger logger, ActionExecutingContext context, IActionResult result)
|
||||||
|
{
|
||||||
|
var actionName = context.ActionDescriptor.DisplayName;
|
||||||
|
_actionMethodExecuted(logger, actionName, Convert.ToString(result), null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.Logging
|
||||||
|
{
|
||||||
|
public static class FileResultLoggerExtensions
|
||||||
|
{
|
||||||
|
private static Action<ILogger, string, Exception> _fileResultExecuting;
|
||||||
|
|
||||||
|
static FileResultLoggerExtensions()
|
||||||
|
{
|
||||||
|
_fileResultExecuting = LoggerMessage.Define<string>(
|
||||||
|
LogLevel.Information,
|
||||||
|
1,
|
||||||
|
"Executing FileResult, sending file as {FileDownloadName}");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void FileResultExecuting(this ILogger logger, string fileDownloadName)
|
||||||
|
{
|
||||||
|
_fileResultExecuting(logger, fileDownloadName, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.Logging
|
||||||
|
{
|
||||||
|
public static class HttpStatusCodeLoggerExtensions
|
||||||
|
{
|
||||||
|
private static Action<ILogger, int, Exception> _httpStatusCodeResultExecuting;
|
||||||
|
|
||||||
|
static HttpStatusCodeLoggerExtensions()
|
||||||
|
{
|
||||||
|
_httpStatusCodeResultExecuting = LoggerMessage.Define<int>(
|
||||||
|
LogLevel.Information,
|
||||||
|
1,
|
||||||
|
"Executing HttpStatusCodeResult, setting HTTP status code {StatusCode}");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void HttpStatusCodeResultExecuting(this ILogger logger, int statusCode)
|
||||||
|
{
|
||||||
|
_httpStatusCodeResultExecuting(logger, statusCode, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.Logging
|
||||||
|
{
|
||||||
|
public static class JsonResultLoggerExtensions
|
||||||
|
{
|
||||||
|
private static Action<ILogger, string, Exception> _jsonResultExecuting;
|
||||||
|
|
||||||
|
static JsonResultLoggerExtensions()
|
||||||
|
{
|
||||||
|
_jsonResultExecuting = LoggerMessage.Define<string>(
|
||||||
|
LogLevel.Information,
|
||||||
|
1,
|
||||||
|
"Executing JsonResult, writing value {Value}.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void JsonResultExecuting(this ILogger logger, object value)
|
||||||
|
{
|
||||||
|
_jsonResultExecuting(logger, Convert.ToString(value), null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.Logging
|
||||||
|
{
|
||||||
|
public static class ObjectResultExecutorLoggerExtensions
|
||||||
|
{
|
||||||
|
private static Action<ILogger, string, Exception> _objectResultExecuting;
|
||||||
|
|
||||||
|
static ObjectResultExecutorLoggerExtensions()
|
||||||
|
{
|
||||||
|
_objectResultExecuting = LoggerMessage.Define<string>(
|
||||||
|
LogLevel.Information,
|
||||||
|
1,
|
||||||
|
"Executing ObjectResult, writing value {Value}.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ObjectResultExecuting(this ILogger logger, object value)
|
||||||
|
{
|
||||||
|
_objectResultExecuting(logger, Convert.ToString(value), null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.Logging
|
||||||
|
{
|
||||||
|
public static class RedirectResultLoggerExtensions
|
||||||
|
{
|
||||||
|
private static Action<ILogger, string, Exception> _redirectResultExecuting;
|
||||||
|
|
||||||
|
static RedirectResultLoggerExtensions()
|
||||||
|
{
|
||||||
|
_redirectResultExecuting = LoggerMessage.Define<string>(
|
||||||
|
LogLevel.Information,
|
||||||
|
1,
|
||||||
|
"Executing RedirectResult, redirecting to {Destination}.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void RedirectResultExecuting(this ILogger logger, string destination)
|
||||||
|
{
|
||||||
|
_redirectResultExecuting(logger, destination, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.Logging
|
||||||
|
{
|
||||||
|
public static class RedirectToActionResultLoggerExtensions
|
||||||
|
{
|
||||||
|
private static Action<ILogger, string, Exception> _redirectToActionResultExecuting;
|
||||||
|
|
||||||
|
static RedirectToActionResultLoggerExtensions()
|
||||||
|
{
|
||||||
|
_redirectToActionResultExecuting = LoggerMessage.Define<string>(
|
||||||
|
LogLevel.Information,
|
||||||
|
1,
|
||||||
|
"Executing RedirectResult, redirecting to {Destination}.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void RedirectToActionResultExecuting(this ILogger logger, string destination)
|
||||||
|
{
|
||||||
|
_redirectToActionResultExecuting(logger, destination, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.Logging
|
||||||
|
{
|
||||||
|
public static class RedirectToRouteResultLoggerExtensions
|
||||||
|
{
|
||||||
|
private static Action<ILogger, string, string, Exception> _redirectToRouteResultExecuting;
|
||||||
|
|
||||||
|
static RedirectToRouteResultLoggerExtensions()
|
||||||
|
{
|
||||||
|
_redirectToRouteResultExecuting = LoggerMessage.Define<string, string>(
|
||||||
|
LogLevel.Information,
|
||||||
|
1,
|
||||||
|
"Executing RedirectToRouteResult, redirecting to {Destination} from route {RouteName}.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void RedirectToRouteResultExecuting(this ILogger logger, string destination, string routeName)
|
||||||
|
{
|
||||||
|
_redirectToRouteResultExecuting(logger, destination, routeName, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -36,7 +36,9 @@ namespace Microsoft.AspNet.Mvc
|
||||||
public override Task ExecuteResultAsync(ActionContext context)
|
public override Task ExecuteResultAsync(ActionContext context)
|
||||||
{
|
{
|
||||||
var executor = context.HttpContext.RequestServices.GetRequiredService<ObjectResultExecutor>();
|
var executor = context.HttpContext.RequestServices.GetRequiredService<ObjectResultExecutor>();
|
||||||
return executor.ExecuteAsync(context, this);
|
var result = executor.ExecuteAsync(context, this);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,10 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using Microsoft.AspNet.Mvc.Core;
|
using Microsoft.AspNet.Mvc.Core;
|
||||||
|
using Microsoft.AspNet.Mvc.Logging;
|
||||||
using Microsoft.AspNet.Mvc.ViewFeatures;
|
using Microsoft.AspNet.Mvc.ViewFeatures;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc
|
namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
|
|
@ -65,6 +67,9 @@ namespace Microsoft.AspNet.Mvc
|
||||||
throw new ArgumentNullException(nameof(context));
|
throw new ArgumentNullException(nameof(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var loggerFactory = context.HttpContext.RequestServices.GetRequiredService<ILoggerFactory>();
|
||||||
|
var logger = loggerFactory.CreateLogger<RedirectResult>();
|
||||||
|
|
||||||
var urlHelper = GetUrlHelper(context);
|
var urlHelper = GetUrlHelper(context);
|
||||||
|
|
||||||
// IsLocalUrl is called to handle Urls starting with '~/'.
|
// IsLocalUrl is called to handle Urls starting with '~/'.
|
||||||
|
|
@ -74,6 +79,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
destinationUrl = urlHelper.Content(Url);
|
destinationUrl = urlHelper.Content(Url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logger.RedirectResultExecuting(destinationUrl);
|
||||||
context.HttpContext.Response.Redirect(destinationUrl, Permanent);
|
context.HttpContext.Response.Redirect(destinationUrl, Permanent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,10 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Microsoft.AspNet.Mvc.Core;
|
using Microsoft.AspNet.Mvc.Core;
|
||||||
|
using Microsoft.AspNet.Mvc.Logging;
|
||||||
using Microsoft.AspNet.Mvc.ViewFeatures;
|
using Microsoft.AspNet.Mvc.ViewFeatures;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc
|
namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
|
|
@ -48,6 +50,9 @@ namespace Microsoft.AspNet.Mvc
|
||||||
throw new ArgumentNullException(nameof(context));
|
throw new ArgumentNullException(nameof(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var loggerFactory = context.HttpContext.RequestServices.GetRequiredService<ILoggerFactory>();
|
||||||
|
var logger = loggerFactory.CreateLogger<RedirectToActionResult>();
|
||||||
|
|
||||||
var urlHelper = GetUrlHelper(context);
|
var urlHelper = GetUrlHelper(context);
|
||||||
|
|
||||||
var destinationUrl = urlHelper.Action(ActionName, ControllerName, RouteValues);
|
var destinationUrl = urlHelper.Action(ActionName, ControllerName, RouteValues);
|
||||||
|
|
@ -56,6 +61,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
throw new InvalidOperationException(Resources.NoRoutesMatched);
|
throw new InvalidOperationException(Resources.NoRoutesMatched);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logger.RedirectToActionResultExecuting(destinationUrl);
|
||||||
context.HttpContext.Response.Redirect(destinationUrl, Permanent);
|
context.HttpContext.Response.Redirect(destinationUrl, Permanent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,11 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Microsoft.AspNet.Mvc.Core;
|
using Microsoft.AspNet.Mvc.Core;
|
||||||
|
using Microsoft.AspNet.Mvc.Logging;
|
||||||
using Microsoft.AspNet.Mvc.ViewFeatures;
|
using Microsoft.AspNet.Mvc.ViewFeatures;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Internal;
|
using Microsoft.Extensions.Internal;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc
|
namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
|
|
@ -49,6 +51,9 @@ namespace Microsoft.AspNet.Mvc
|
||||||
throw new ArgumentNullException(nameof(context));
|
throw new ArgumentNullException(nameof(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var loggerFactory = context.HttpContext.RequestServices.GetRequiredService<ILoggerFactory>();
|
||||||
|
var logger = loggerFactory.CreateLogger<RedirectToRouteResult>();
|
||||||
|
|
||||||
var urlHelper = GetUrlHelper(context);
|
var urlHelper = GetUrlHelper(context);
|
||||||
|
|
||||||
var destinationUrl = urlHelper.RouteUrl(RouteName, RouteValues);
|
var destinationUrl = urlHelper.RouteUrl(RouteName, RouteValues);
|
||||||
|
|
@ -57,6 +62,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
throw new InvalidOperationException(Resources.NoRoutesMatched);
|
throw new InvalidOperationException(Resources.NoRoutesMatched);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logger.RedirectToRouteResultExecuting(destinationUrl, RouteName);
|
||||||
context.HttpContext.Response.Redirect(destinationUrl, Permanent);
|
context.HttpContext.Response.Redirect(destinationUrl, Permanent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,11 @@ using System;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.OptionsModel;
|
using Microsoft.Extensions.OptionsModel;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using Microsoft.AspNet.Mvc.Logging;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc
|
namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
|
|
@ -72,6 +74,9 @@ namespace Microsoft.AspNet.Mvc
|
||||||
throw new ArgumentNullException(nameof(context));
|
throw new ArgumentNullException(nameof(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var loggerFactory = context.HttpContext.RequestServices.GetRequiredService<ILoggerFactory>();
|
||||||
|
var logger = loggerFactory.CreateLogger<JsonResult>();
|
||||||
|
|
||||||
var response = context.HttpContext.Response;
|
var response = context.HttpContext.Response;
|
||||||
|
|
||||||
var contentTypeHeader = ContentType;
|
var contentTypeHeader = ContentType;
|
||||||
|
|
@ -107,6 +112,8 @@ namespace Microsoft.AspNet.Mvc
|
||||||
.SerializerSettings;
|
.SerializerSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logger.JsonResultExecuting(Value);
|
||||||
|
|
||||||
using (var writer = new HttpResponseStreamWriter(response.Body, contentTypeHeader.Encoding))
|
using (var writer = new HttpResponseStreamWriter(response.Body, contentTypeHeader.Encoding))
|
||||||
{
|
{
|
||||||
using (var jsonWriter = new JsonTextWriter(writer))
|
using (var jsonWriter = new JsonTextWriter(writer))
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Microsoft.AspNet.Mvc.ViewEngines;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.Logging
|
||||||
|
{
|
||||||
|
public static class PartialViewResultExecutorLoggerExtensions
|
||||||
|
{
|
||||||
|
private static Action<ILogger, string, Exception> _partialViewResultExecuting;
|
||||||
|
|
||||||
|
static PartialViewResultExecutorLoggerExtensions()
|
||||||
|
{
|
||||||
|
_partialViewResultExecuting = LoggerMessage.Define<string>(
|
||||||
|
LogLevel.Information,
|
||||||
|
1,
|
||||||
|
"Executing PartialViewResult, running view at path {Path}.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void PartialViewResultExecuting(this ILogger logger, IView view)
|
||||||
|
{
|
||||||
|
_partialViewResultExecuting(logger, view.Path, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.Logging
|
||||||
|
{
|
||||||
|
public static class ViewComponentResultLoggerExtensions
|
||||||
|
{
|
||||||
|
private static Action<ILogger, string, string[], Exception> _viewComponentResultExecuting;
|
||||||
|
|
||||||
|
static ViewComponentResultLoggerExtensions()
|
||||||
|
{
|
||||||
|
_viewComponentResultExecuting = LoggerMessage.Define<string, string[]>(
|
||||||
|
LogLevel.Information,
|
||||||
|
1,
|
||||||
|
"Executing ViewComponentResult, running {ViewComponentName} with arguments ({Arguments}).");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ViewComponentResultExecuting(this ILogger logger, string viewComponentName, object[] arguments)
|
||||||
|
{
|
||||||
|
if (logger.IsEnabled(LogLevel.Information))
|
||||||
|
{
|
||||||
|
var formattedArguments = new string[arguments.Length];
|
||||||
|
for (var i = 0; i < arguments.Length; i++)
|
||||||
|
{
|
||||||
|
formattedArguments[i] = Convert.ToString(arguments[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
_viewComponentResultExecuting(logger, viewComponentName, formattedArguments, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ViewComponentResultExecuting(this ILogger logger, Type viewComponentType, object[] arguments)
|
||||||
|
{
|
||||||
|
if (logger.IsEnabled(LogLevel.Information))
|
||||||
|
{
|
||||||
|
var formattedArguments = new string[arguments.Length];
|
||||||
|
for (var i = 0; i < arguments.Length; i++)
|
||||||
|
{
|
||||||
|
formattedArguments[i] = Convert.ToString(arguments[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
_viewComponentResultExecuting(logger, viewComponentType.Name, formattedArguments, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Microsoft.AspNet.Mvc.ViewEngines;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Mvc.Logging
|
||||||
|
{
|
||||||
|
public static class ViewResultExecutorLoggerExtensions
|
||||||
|
{
|
||||||
|
private static Action<ILogger, string, Exception> _viewResultExecuting;
|
||||||
|
|
||||||
|
static ViewResultExecutorLoggerExtensions()
|
||||||
|
{
|
||||||
|
_viewResultExecuting = LoggerMessage.Define<string>(
|
||||||
|
LogLevel.Information,
|
||||||
|
1,
|
||||||
|
"Executing ViewResult, running view at path {Path}.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ViewResultExecuting(this ILogger logger, IView view)
|
||||||
|
{
|
||||||
|
_viewResultExecuting(logger, view.Path, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -4,12 +4,14 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNet.Mvc.Logging;
|
||||||
using Microsoft.AspNet.Mvc.ModelBinding;
|
using Microsoft.AspNet.Mvc.ModelBinding;
|
||||||
using Microsoft.AspNet.Mvc.Rendering;
|
using Microsoft.AspNet.Mvc.Rendering;
|
||||||
using Microsoft.AspNet.Mvc.ViewEngines;
|
using Microsoft.AspNet.Mvc.ViewEngines;
|
||||||
using Microsoft.AspNet.Mvc.ViewFeatures;
|
using Microsoft.AspNet.Mvc.ViewFeatures;
|
||||||
using Microsoft.AspNet.Mvc.ViewFeatures.Internal;
|
using Microsoft.AspNet.Mvc.ViewFeatures.Internal;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.OptionsModel;
|
using Microsoft.Extensions.OptionsModel;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
|
|
||||||
|
|
@ -72,6 +74,9 @@ namespace Microsoft.AspNet.Mvc
|
||||||
var htmlHelperOptions = services.GetRequiredService<IOptions<MvcViewOptions>>().Value.HtmlHelperOptions;
|
var htmlHelperOptions = services.GetRequiredService<IOptions<MvcViewOptions>>().Value.HtmlHelperOptions;
|
||||||
var viewComponentHelper = services.GetRequiredService<IViewComponentHelper>();
|
var viewComponentHelper = services.GetRequiredService<IViewComponentHelper>();
|
||||||
|
|
||||||
|
var loggerFactory = services.GetRequiredService<ILoggerFactory>();
|
||||||
|
var logger = loggerFactory.CreateLogger<ViewComponentResult>();
|
||||||
|
|
||||||
var viewData = ViewData;
|
var viewData = ViewData;
|
||||||
if (viewData == null)
|
if (viewData == null)
|
||||||
{
|
{
|
||||||
|
|
@ -124,10 +129,12 @@ namespace Microsoft.AspNet.Mvc
|
||||||
}
|
}
|
||||||
else if (ViewComponentType == null)
|
else if (ViewComponentType == null)
|
||||||
{
|
{
|
||||||
|
logger.ViewComponentResultExecuting(ViewComponentName, Arguments);
|
||||||
await viewComponentHelper.RenderInvokeAsync(ViewComponentName, Arguments);
|
await viewComponentHelper.RenderInvokeAsync(ViewComponentName, Arguments);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
logger.ViewComponentResultExecuting(ViewComponentType, Arguments);
|
||||||
await viewComponentHelper.RenderInvokeAsync(ViewComponentType, Arguments);
|
await viewComponentHelper.RenderInvokeAsync(ViewComponentType, Arguments);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNet.Mvc.Infrastructure;
|
using Microsoft.AspNet.Mvc.Infrastructure;
|
||||||
|
using Microsoft.AspNet.Mvc.Logging;
|
||||||
using Microsoft.AspNet.Mvc.ViewEngines;
|
using Microsoft.AspNet.Mvc.ViewEngines;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.OptionsModel;
|
using Microsoft.Extensions.OptionsModel;
|
||||||
|
|
@ -134,6 +135,8 @@ namespace Microsoft.AspNet.Mvc.ViewFeatures
|
||||||
throw new ArgumentNullException(nameof(viewResult));
|
throw new ArgumentNullException(nameof(viewResult));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Logger.PartialViewResultExecuting(view);
|
||||||
|
|
||||||
return ExecuteAsync(
|
return ExecuteAsync(
|
||||||
actionContext,
|
actionContext,
|
||||||
view,
|
view,
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNet.Mvc.Infrastructure;
|
using Microsoft.AspNet.Mvc.Infrastructure;
|
||||||
|
using Microsoft.AspNet.Mvc.Logging;
|
||||||
using Microsoft.AspNet.Mvc.ViewEngines;
|
using Microsoft.AspNet.Mvc.ViewEngines;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.OptionsModel;
|
using Microsoft.Extensions.OptionsModel;
|
||||||
|
|
@ -134,6 +135,9 @@ namespace Microsoft.AspNet.Mvc.ViewFeatures
|
||||||
throw new ArgumentNullException(nameof(viewResult));
|
throw new ArgumentNullException(nameof(viewResult));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Logger.ViewResultExecuting(view);
|
||||||
|
|
||||||
return ExecuteAsync(
|
return ExecuteAsync(
|
||||||
actionContext,
|
actionContext,
|
||||||
view,
|
view,
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,9 @@ using Microsoft.AspNet.Http;
|
||||||
using Microsoft.AspNet.Http.Authentication;
|
using Microsoft.AspNet.Http.Authentication;
|
||||||
using Microsoft.AspNet.Mvc.Abstractions;
|
using Microsoft.AspNet.Mvc.Abstractions;
|
||||||
using Microsoft.AspNet.Routing;
|
using Microsoft.AspNet.Routing;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
|
|
@ -18,7 +21,10 @@ namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var result = new ChallengeResult("", null);
|
var result = new ChallengeResult("", null);
|
||||||
|
|
||||||
var httpContext = new Mock<HttpContext>();
|
var httpContext = new Mock<HttpContext>();
|
||||||
|
httpContext.SetupGet(c => c.RequestServices).Returns(CreateServices().BuildServiceProvider());
|
||||||
|
|
||||||
var auth = new Mock<AuthenticationManager>();
|
var auth = new Mock<AuthenticationManager>();
|
||||||
httpContext.Setup(o => o.Authentication).Returns(auth.Object);
|
httpContext.Setup(o => o.Authentication).Returns(auth.Object);
|
||||||
|
|
||||||
|
|
@ -41,7 +47,10 @@ namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var result = new ChallengeResult(new string[] { }, null);
|
var result = new ChallengeResult(new string[] { }, null);
|
||||||
|
|
||||||
var httpContext = new Mock<HttpContext>();
|
var httpContext = new Mock<HttpContext>();
|
||||||
|
httpContext.SetupGet(c => c.RequestServices).Returns(CreateServices().BuildServiceProvider());
|
||||||
|
|
||||||
var auth = new Mock<AuthenticationManager>();
|
var auth = new Mock<AuthenticationManager>();
|
||||||
httpContext.Setup(o => o.Authentication).Returns(auth.Object);
|
httpContext.Setup(o => o.Authentication).Returns(auth.Object);
|
||||||
|
|
||||||
|
|
@ -58,5 +67,12 @@ namespace Microsoft.AspNet.Mvc
|
||||||
// Assert
|
// Assert
|
||||||
auth.Verify(c => c.ChallengeAsync((AuthenticationProperties)null), Times.Exactly(1));
|
auth.Verify(c => c.ChallengeAsync((AuthenticationProperties)null), Times.Exactly(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static IServiceCollection CreateServices()
|
||||||
|
{
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
services.AddInstance<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
|
return services;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -9,7 +9,11 @@ using Microsoft.AspNet.Http;
|
||||||
using Microsoft.AspNet.Http.Features;
|
using Microsoft.AspNet.Http.Features;
|
||||||
using Microsoft.AspNet.Http.Internal;
|
using Microsoft.AspNet.Http.Internal;
|
||||||
using Microsoft.AspNet.Mvc.Abstractions;
|
using Microsoft.AspNet.Mvc.Abstractions;
|
||||||
|
using Microsoft.AspNet.Mvc.ViewComponents;
|
||||||
using Microsoft.AspNet.Routing;
|
using Microsoft.AspNet.Routing;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
@ -94,7 +98,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
Encoding = Encoding.ASCII
|
Encoding = Encoding.ASCII
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
httpContext.Features.Set<IHttpBufferingFeature>(new TestBufferingFeature());
|
httpContext.Features.Set<IHttpBufferingFeature>(new TestBufferingFeature());
|
||||||
var memoryStream = new MemoryStream();
|
var memoryStream = new MemoryStream();
|
||||||
httpContext.Response.Body = memoryStream;
|
httpContext.Response.Body = memoryStream;
|
||||||
|
|
@ -215,9 +219,21 @@ namespace Microsoft.AspNet.Mvc
|
||||||
new ActionDescriptor());
|
new ActionDescriptor());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static IServiceCollection CreateServices(params ViewComponentDescriptor[] descriptors)
|
||||||
|
{
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
services.AddInstance<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
|
||||||
private static HttpContext GetHttpContext()
|
private static HttpContext GetHttpContext()
|
||||||
{
|
{
|
||||||
return new DefaultHttpContext();
|
var services = CreateServices();
|
||||||
|
|
||||||
|
var httpContext = new DefaultHttpContext();
|
||||||
|
httpContext.RequestServices = services.BuildServiceProvider();
|
||||||
|
|
||||||
|
return httpContext;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -18,6 +18,7 @@ using Microsoft.AspNet.Mvc.ModelBinding;
|
||||||
using Microsoft.AspNet.Mvc.ModelBinding.Validation;
|
using Microsoft.AspNet.Mvc.ModelBinding.Validation;
|
||||||
using Microsoft.AspNet.Routing;
|
using Microsoft.AspNet.Routing;
|
||||||
using Microsoft.AspNet.Testing;
|
using Microsoft.AspNet.Testing;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.Logging.Testing;
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
using Microsoft.Extensions.OptionsModel;
|
using Microsoft.Extensions.OptionsModel;
|
||||||
|
|
@ -1976,13 +1977,17 @@ namespace Microsoft.AspNet.Mvc.Controllers
|
||||||
}
|
}
|
||||||
|
|
||||||
var httpContext = new Mock<HttpContext>(MockBehavior.Loose);
|
var httpContext = new Mock<HttpContext>(MockBehavior.Loose);
|
||||||
var httpRequest = new DefaultHttpContext().Request;
|
|
||||||
var httpResponse = new DefaultHttpContext().Response;
|
var http = GetHttpContext();
|
||||||
|
|
||||||
|
var httpRequest = http.Request;
|
||||||
|
var httpResponse = http.Response;
|
||||||
|
|
||||||
httpContext.SetupGet(c => c.Request).Returns(httpRequest);
|
httpContext.SetupGet(c => c.Request).Returns(httpRequest);
|
||||||
httpContext.SetupGet(c => c.Response).Returns(httpResponse);
|
httpContext.SetupGet(c => c.Response).Returns(httpResponse);
|
||||||
httpContext.Setup(o => o.RequestServices.GetService(typeof(ILogger<ObjectResult>)))
|
httpContext
|
||||||
.Returns(new Mock<ILogger<ObjectResult>>().Object);
|
.Setup(o => o.RequestServices.GetService(typeof(ILoggerFactory)))
|
||||||
|
.Returns(NullLoggerFactory.Instance);
|
||||||
|
|
||||||
httpResponse.Body = new MemoryStream();
|
httpResponse.Body = new MemoryStream();
|
||||||
|
|
||||||
|
|
@ -2136,6 +2141,25 @@ namespace Microsoft.AspNet.Mvc.Controllers
|
||||||
throw _actionException;
|
throw _actionException;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static IServiceCollection CreateServices()
|
||||||
|
{
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
|
||||||
|
services.AddInstance<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
|
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HttpContext GetHttpContext()
|
||||||
|
{
|
||||||
|
var services = CreateServices();
|
||||||
|
|
||||||
|
var httpContext = new DefaultHttpContext();
|
||||||
|
httpContext.RequestServices = services.BuildServiceProvider();
|
||||||
|
|
||||||
|
return httpContext;
|
||||||
|
}
|
||||||
|
|
||||||
public IActionResult ActionMethodWithBodyParameter([FromBody] Person bodyParam)
|
public IActionResult ActionMethodWithBodyParameter([FromBody] Person bodyParam)
|
||||||
{
|
{
|
||||||
return new ObjectResult(bodyParam);
|
return new ObjectResult(bodyParam);
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,14 @@
|
||||||
|
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNet.Http;
|
||||||
using Microsoft.AspNet.Http.Features;
|
using Microsoft.AspNet.Http.Features;
|
||||||
using Microsoft.AspNet.Http.Internal;
|
using Microsoft.AspNet.Http.Internal;
|
||||||
using Microsoft.AspNet.Mvc.Abstractions;
|
using Microsoft.AspNet.Mvc.Abstractions;
|
||||||
using Microsoft.AspNet.Routing;
|
using Microsoft.AspNet.Routing;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
|
|
@ -33,7 +37,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
// Arrange
|
// Arrange
|
||||||
var buffer = new byte[] { 1, 2, 3, 4, 5 };
|
var buffer = new byte[] { 1, 2, 3, 4, 5 };
|
||||||
|
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
|
|
||||||
var outStream = new MemoryStream();
|
var outStream = new MemoryStream();
|
||||||
httpContext.Response.Body = outStream;
|
httpContext.Response.Body = outStream;
|
||||||
|
|
@ -56,7 +60,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
var expectedContentType = "text/foo; charset=us-ascii";
|
var expectedContentType = "text/foo; charset=us-ascii";
|
||||||
var buffer = new byte[] { 1, 2, 3, 4, 5 };
|
var buffer = new byte[] { 1, 2, 3, 4, 5 };
|
||||||
|
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
|
|
||||||
var outStream = new MemoryStream();
|
var outStream = new MemoryStream();
|
||||||
httpContext.Response.Body = outStream;
|
httpContext.Response.Body = outStream;
|
||||||
|
|
@ -80,7 +84,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
var expectedContentType = "text/foo; charset=us-ascii";
|
var expectedContentType = "text/foo; charset=us-ascii";
|
||||||
var buffer = new byte[] { 1, 2, 3, 4, 5 };
|
var buffer = new byte[] { 1, 2, 3, 4, 5 };
|
||||||
|
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
var bufferingFeature = new TestBufferingFeature();
|
var bufferingFeature = new TestBufferingFeature();
|
||||||
httpContext.Features.Set<IHttpBufferingFeature>(bufferingFeature);
|
httpContext.Features.Set<IHttpBufferingFeature>(bufferingFeature);
|
||||||
var outStream = new MemoryStream();
|
var outStream = new MemoryStream();
|
||||||
|
|
@ -99,6 +103,25 @@ namespace Microsoft.AspNet.Mvc
|
||||||
Assert.True(bufferingFeature.DisableResponseBufferingInvoked);
|
Assert.True(bufferingFeature.DisableResponseBufferingInvoked);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static IServiceCollection CreateServices()
|
||||||
|
{
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
|
||||||
|
services.AddInstance<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
|
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HttpContext GetHttpContext()
|
||||||
|
{
|
||||||
|
var services = CreateServices();
|
||||||
|
|
||||||
|
var httpContext = new DefaultHttpContext();
|
||||||
|
httpContext.RequestServices = services.BuildServiceProvider();
|
||||||
|
|
||||||
|
return httpContext;
|
||||||
|
}
|
||||||
|
|
||||||
private class TestBufferingFeature : IHttpBufferingFeature
|
private class TestBufferingFeature : IHttpBufferingFeature
|
||||||
{
|
{
|
||||||
public bool DisableResponseBufferingInvoked { get; private set; }
|
public bool DisableResponseBufferingInvoked { get; private set; }
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,9 @@ using Microsoft.AspNet.Http;
|
||||||
using Microsoft.AspNet.Http.Internal;
|
using Microsoft.AspNet.Http.Internal;
|
||||||
using Microsoft.AspNet.Mvc.Abstractions;
|
using Microsoft.AspNet.Mvc.Abstractions;
|
||||||
using Microsoft.AspNet.Routing;
|
using Microsoft.AspNet.Routing;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
@ -32,7 +35,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
// See comment in FileResult.cs detailing how the FileDownloadName should be encoded.
|
// See comment in FileResult.cs detailing how the FileDownloadName should be encoded.
|
||||||
|
|
||||||
// Arrange
|
// Arrange
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
var actionContext = CreateActionContext(httpContext);
|
var actionContext = CreateActionContext(httpContext);
|
||||||
|
|
||||||
var result = new EmptyFileResult("application/my-type")
|
var result = new EmptyFileResult("application/my-type")
|
||||||
|
|
@ -54,7 +57,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
public async Task ContentDispositionHeader_IsEncodedCorrectly_ForUnicodeCharacters()
|
public async Task ContentDispositionHeader_IsEncodedCorrectly_ForUnicodeCharacters()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
var actionContext = CreateActionContext(httpContext);
|
var actionContext = CreateActionContext(httpContext);
|
||||||
|
|
||||||
var result = new EmptyFileResult("application/my-type")
|
var result = new EmptyFileResult("application/my-type")
|
||||||
|
|
@ -77,8 +80,12 @@ namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var httpContext = new Mock<HttpContext>(MockBehavior.Strict);
|
var httpContext = new Mock<HttpContext>(MockBehavior.Strict);
|
||||||
|
|
||||||
httpContext.SetupSet(c => c.Response.ContentType = "application/my-type").Verifiable();
|
httpContext.SetupSet(c => c.Response.ContentType = "application/my-type").Verifiable();
|
||||||
httpContext.Setup(c => c.Response.Body).Returns(Stream.Null);
|
httpContext.Setup(c => c.Response.Body).Returns(Stream.Null);
|
||||||
|
httpContext
|
||||||
|
.Setup(c => c.RequestServices.GetService(typeof(ILoggerFactory)))
|
||||||
|
.Returns(NullLoggerFactory.Instance);
|
||||||
|
|
||||||
var actionContext = CreateActionContext(httpContext.Object);
|
var actionContext = CreateActionContext(httpContext.Object);
|
||||||
|
|
||||||
|
|
@ -96,7 +103,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
public async Task ExecuteResultAsync_SetsContentDisposition_IfSpecified()
|
public async Task ExecuteResultAsync_SetsContentDisposition_IfSpecified()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
var actionContext = CreateActionContext(httpContext);
|
var actionContext = CreateActionContext(httpContext);
|
||||||
|
|
||||||
var result = new EmptyFileResult("application/my-type")
|
var result = new EmptyFileResult("application/my-type")
|
||||||
|
|
@ -207,6 +214,23 @@ namespace Microsoft.AspNet.Mvc
|
||||||
Assert.Equal(expectedOutput, actual);
|
Assert.Equal(expectedOutput, actual);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static IServiceCollection CreateServices()
|
||||||
|
{
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
services.AddInstance<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HttpContext GetHttpContext()
|
||||||
|
{
|
||||||
|
var services = CreateServices();
|
||||||
|
|
||||||
|
var httpContext = new DefaultHttpContext();
|
||||||
|
httpContext.RequestServices = services.BuildServiceProvider();
|
||||||
|
|
||||||
|
return httpContext;
|
||||||
|
}
|
||||||
|
|
||||||
private static ActionContext CreateActionContext(HttpContext context)
|
private static ActionContext CreateActionContext(HttpContext context)
|
||||||
{
|
{
|
||||||
return new ActionContext(context, new RouteData(), new ActionDescriptor());
|
return new ActionContext(context, new RouteData(), new ActionDescriptor());
|
||||||
|
|
|
||||||
|
|
@ -6,10 +6,14 @@ using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNet.Http;
|
||||||
using Microsoft.AspNet.Http.Features;
|
using Microsoft.AspNet.Http.Features;
|
||||||
using Microsoft.AspNet.Http.Internal;
|
using Microsoft.AspNet.Http.Internal;
|
||||||
using Microsoft.AspNet.Mvc.Abstractions;
|
using Microsoft.AspNet.Mvc.Abstractions;
|
||||||
using Microsoft.AspNet.Routing;
|
using Microsoft.AspNet.Routing;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
@ -52,7 +56,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
|
|
||||||
var result = new FileStreamResult(mockReadStream.Object, "text/plain");
|
var result = new FileStreamResult(mockReadStream.Object, "text/plain");
|
||||||
|
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
httpContext.Response.Body = mockBodyStream.Object;
|
httpContext.Response.Body = mockBodyStream.Object;
|
||||||
|
|
||||||
var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
||||||
|
|
@ -76,7 +80,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
|
|
||||||
var originalStream = new MemoryStream(originalBytes);
|
var originalStream = new MemoryStream(originalBytes);
|
||||||
|
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
var outStream = new MemoryStream();
|
var outStream = new MemoryStream();
|
||||||
httpContext.Response.Body = outStream;
|
httpContext.Response.Body = outStream;
|
||||||
|
|
||||||
|
|
@ -104,7 +108,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
|
|
||||||
var originalStream = new MemoryStream(originalBytes);
|
var originalStream = new MemoryStream(originalBytes);
|
||||||
|
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
var outStream = new MemoryStream();
|
var outStream = new MemoryStream();
|
||||||
httpContext.Response.Body = outStream;
|
httpContext.Response.Body = outStream;
|
||||||
|
|
||||||
|
|
@ -130,7 +134,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
|
|
||||||
var originalStream = new MemoryStream(expected);
|
var originalStream = new MemoryStream(expected);
|
||||||
|
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
var bufferingFeature = new TestBufferingFeature();
|
var bufferingFeature = new TestBufferingFeature();
|
||||||
httpContext.Features.Set<IHttpBufferingFeature>(bufferingFeature);
|
httpContext.Features.Set<IHttpBufferingFeature>(bufferingFeature);
|
||||||
var outStream = new MemoryStream();
|
var outStream = new MemoryStream();
|
||||||
|
|
@ -148,5 +152,22 @@ namespace Microsoft.AspNet.Mvc
|
||||||
Assert.Equal(expectedContentType, httpContext.Response.ContentType);
|
Assert.Equal(expectedContentType, httpContext.Response.ContentType);
|
||||||
Assert.True(bufferingFeature.DisableResponseBufferingInvoked);
|
Assert.True(bufferingFeature.DisableResponseBufferingInvoked);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static IServiceCollection CreateServices()
|
||||||
|
{
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
services.AddInstance<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HttpContext GetHttpContext()
|
||||||
|
{
|
||||||
|
var services = CreateServices();
|
||||||
|
|
||||||
|
var httpContext = new DefaultHttpContext();
|
||||||
|
httpContext.RequestServices = services.BuildServiceProvider();
|
||||||
|
|
||||||
|
return httpContext;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -6,6 +6,9 @@ using Microsoft.AspNet.Http;
|
||||||
using Microsoft.AspNet.Http.Internal;
|
using Microsoft.AspNet.Http.Internal;
|
||||||
using Microsoft.AspNet.Mvc.Abstractions;
|
using Microsoft.AspNet.Mvc.Abstractions;
|
||||||
using Microsoft.AspNet.Routing;
|
using Microsoft.AspNet.Routing;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc
|
namespace Microsoft.AspNet.Mvc
|
||||||
|
|
@ -26,7 +29,10 @@ namespace Microsoft.AspNet.Mvc
|
||||||
public async Task HttpOkResult_SetsStatusCode()
|
public async Task HttpOkResult_SetsStatusCode()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var context = new ActionContext(new DefaultHttpContext(), new RouteData(), new ActionDescriptor());
|
var httpContext = new DefaultHttpContext();
|
||||||
|
httpContext.RequestServices = CreateServices().BuildServiceProvider();
|
||||||
|
|
||||||
|
var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
||||||
var result = new HttpOkResult();
|
var result = new HttpOkResult();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -35,5 +41,12 @@ namespace Microsoft.AspNet.Mvc
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(StatusCodes.Status200OK, context.HttpContext.Response.StatusCode);
|
Assert.Equal(StatusCodes.Status200OK, context.HttpContext.Response.StatusCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static IServiceCollection CreateServices()
|
||||||
|
{
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
services.AddInstance<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
|
return services;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,9 @@ using Microsoft.AspNet.Http;
|
||||||
using Microsoft.AspNet.Http.Internal;
|
using Microsoft.AspNet.Http.Internal;
|
||||||
using Microsoft.AspNet.Mvc.Abstractions;
|
using Microsoft.AspNet.Mvc.Abstractions;
|
||||||
using Microsoft.AspNet.Routing;
|
using Microsoft.AspNet.Routing;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc
|
namespace Microsoft.AspNet.Mvc
|
||||||
|
|
@ -17,7 +20,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
// Arrange
|
// Arrange
|
||||||
var result = new HttpStatusCodeResult(StatusCodes.Status404NotFound);
|
var result = new HttpStatusCodeResult(StatusCodes.Status404NotFound);
|
||||||
|
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
var routeData = new RouteData();
|
var routeData = new RouteData();
|
||||||
var actionDescriptor = new ActionDescriptor();
|
var actionDescriptor = new ActionDescriptor();
|
||||||
|
|
||||||
|
|
@ -29,5 +32,22 @@ namespace Microsoft.AspNet.Mvc
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(StatusCodes.Status404NotFound, httpContext.Response.StatusCode);
|
Assert.Equal(StatusCodes.Status404NotFound, httpContext.Response.StatusCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static IServiceCollection CreateServices()
|
||||||
|
{
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
services.AddInstance<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HttpContext GetHttpContext()
|
||||||
|
{
|
||||||
|
var services = CreateServices();
|
||||||
|
|
||||||
|
var httpContext = new DefaultHttpContext();
|
||||||
|
httpContext.RequestServices = services.BuildServiceProvider();
|
||||||
|
|
||||||
|
return httpContext;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -9,6 +9,7 @@ using System.Threading.Tasks;
|
||||||
using Microsoft.AspNet.Http;
|
using Microsoft.AspNet.Http;
|
||||||
using Microsoft.AspNet.Http.Internal;
|
using Microsoft.AspNet.Http.Internal;
|
||||||
using Microsoft.AspNet.Mvc.Formatters;
|
using Microsoft.AspNet.Mvc.Formatters;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.Logging.Testing;
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
using Microsoft.Extensions.OptionsModel;
|
using Microsoft.Extensions.OptionsModel;
|
||||||
|
|
@ -259,7 +260,7 @@ namespace Microsoft.AspNet.Mvc.Infrastructure
|
||||||
|
|
||||||
var actionContext = new ActionContext()
|
var actionContext = new ActionContext()
|
||||||
{
|
{
|
||||||
HttpContext = new DefaultHttpContext(),
|
HttpContext = GetHttpContext(),
|
||||||
};
|
};
|
||||||
|
|
||||||
var result = new ObjectResult("someValue");
|
var result = new ObjectResult("someValue");
|
||||||
|
|
@ -284,7 +285,7 @@ namespace Microsoft.AspNet.Mvc.Infrastructure
|
||||||
|
|
||||||
var actionContext = new ActionContext()
|
var actionContext = new ActionContext()
|
||||||
{
|
{
|
||||||
HttpContext = new DefaultHttpContext(),
|
HttpContext = GetHttpContext(),
|
||||||
};
|
};
|
||||||
|
|
||||||
var result = new ObjectResult("someValue");
|
var result = new ObjectResult("someValue");
|
||||||
|
|
@ -353,7 +354,7 @@ namespace Microsoft.AspNet.Mvc.Infrastructure
|
||||||
|
|
||||||
var actionContext = new ActionContext()
|
var actionContext = new ActionContext()
|
||||||
{
|
{
|
||||||
HttpContext = new DefaultHttpContext(),
|
HttpContext = GetHttpContext(),
|
||||||
};
|
};
|
||||||
actionContext.HttpContext.Request.Headers[HeaderNames.Accept] = acceptHeader;
|
actionContext.HttpContext.Request.Headers[HeaderNames.Accept] = acceptHeader;
|
||||||
|
|
||||||
|
|
@ -390,7 +391,7 @@ namespace Microsoft.AspNet.Mvc.Infrastructure
|
||||||
|
|
||||||
var actionContext = new ActionContext()
|
var actionContext = new ActionContext()
|
||||||
{
|
{
|
||||||
HttpContext = new DefaultHttpContext(),
|
HttpContext = GetHttpContext(),
|
||||||
};
|
};
|
||||||
actionContext.HttpContext.Request.Headers[HeaderNames.Accept] = acceptHeader;
|
actionContext.HttpContext.Request.Headers[HeaderNames.Accept] = acceptHeader;
|
||||||
|
|
||||||
|
|
@ -401,6 +402,25 @@ namespace Microsoft.AspNet.Mvc.Infrastructure
|
||||||
Assert.Equal(expectedContentType, actionContext.HttpContext.Response.Headers[HeaderNames.ContentType]);
|
Assert.Equal(expectedContentType, actionContext.HttpContext.Response.Headers[HeaderNames.ContentType]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static IServiceCollection CreateServices()
|
||||||
|
{
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
|
||||||
|
services.AddInstance<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
|
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HttpContext GetHttpContext()
|
||||||
|
{
|
||||||
|
var services = CreateServices();
|
||||||
|
|
||||||
|
var httpContext = new DefaultHttpContext();
|
||||||
|
httpContext.RequestServices = services.BuildServiceProvider();
|
||||||
|
|
||||||
|
return httpContext;
|
||||||
|
}
|
||||||
|
|
||||||
private static TestObjectResultExecutor CreateExecutor(
|
private static TestObjectResultExecutor CreateExecutor(
|
||||||
IOptions<MvcOptions> options = null,
|
IOptions<MvcOptions> options = null,
|
||||||
ActionBindingContext bindingContext = null)
|
ActionBindingContext bindingContext = null)
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ using Microsoft.AspNet.Http.Internal;
|
||||||
using Microsoft.AspNet.Mvc.Formatters;
|
using Microsoft.AspNet.Mvc.Formatters;
|
||||||
using Microsoft.AspNet.Mvc.Infrastructure;
|
using Microsoft.AspNet.Mvc.Infrastructure;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.Logging.Testing;
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
@ -68,6 +69,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
new TestOptionsManager<MvcOptions>(),
|
new TestOptionsManager<MvcOptions>(),
|
||||||
new ActionBindingContextAccessor(),
|
new ActionBindingContextAccessor(),
|
||||||
NullLoggerFactory.Instance));
|
NullLoggerFactory.Instance));
|
||||||
|
services.AddInstance<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
|
|
||||||
return services.BuildServiceProvider();
|
return services.BuildServiceProvider();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,10 +6,14 @@ using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNet.Http;
|
||||||
using Microsoft.AspNet.Http.Features;
|
using Microsoft.AspNet.Http.Features;
|
||||||
using Microsoft.AspNet.Http.Internal;
|
using Microsoft.AspNet.Http.Internal;
|
||||||
using Microsoft.AspNet.Mvc.Abstractions;
|
using Microsoft.AspNet.Mvc.Abstractions;
|
||||||
using Microsoft.AspNet.Routing;
|
using Microsoft.AspNet.Routing;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
@ -37,7 +41,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
// Arrange
|
// Arrange
|
||||||
var path = Path.GetFullPath(Path.Combine("TestFiles", "FilePathResultTestFile.txt"));
|
var path = Path.GetFullPath(Path.Combine("TestFiles", "FilePathResultTestFile.txt"));
|
||||||
var result = new TestPhysicalFileResult(path, "text/plain");
|
var result = new TestPhysicalFileResult(path, "text/plain");
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
httpContext.Response.Body = new MemoryStream();
|
httpContext.Response.Body = new MemoryStream();
|
||||||
var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
||||||
|
|
||||||
|
|
@ -62,7 +66,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
.Setup(s => s.SendFileAsync(path, 0, null, CancellationToken.None))
|
.Setup(s => s.SendFileAsync(path, 0, null, CancellationToken.None))
|
||||||
.Returns(Task.FromResult<int>(0));
|
.Returns(Task.FromResult<int>(0));
|
||||||
|
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
httpContext.Features.Set(sendFileMock.Object);
|
httpContext.Features.Set(sendFileMock.Object);
|
||||||
var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
||||||
|
|
||||||
|
|
@ -83,7 +87,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
IsAscii = true
|
IsAscii = true
|
||||||
};
|
};
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
var memoryStream = new MemoryStream();
|
var memoryStream = new MemoryStream();
|
||||||
httpContext.Response.Body = memoryStream;
|
httpContext.Response.Body = memoryStream;
|
||||||
var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
||||||
|
|
@ -104,7 +108,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
var path = Path.GetFullPath(Path.Combine(".", "TestFiles", "FilePathResultTestFile.txt"));
|
var path = Path.GetFullPath(Path.Combine(".", "TestFiles", "FilePathResultTestFile.txt"));
|
||||||
var result = new TestPhysicalFileResult(path, "text/plain");
|
var result = new TestPhysicalFileResult(path, "text/plain");
|
||||||
|
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
httpContext.Response.Body = new MemoryStream();
|
httpContext.Response.Body = new MemoryStream();
|
||||||
|
|
||||||
var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
||||||
|
|
@ -136,7 +140,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var result = new TestPhysicalFileResult(path, "text/plain");
|
var result = new TestPhysicalFileResult(path, "text/plain");
|
||||||
var context = new ActionContext(new DefaultHttpContext(), new RouteData(), new ActionDescriptor());
|
var context = new ActionContext(GetHttpContext(), new RouteData(), new ActionDescriptor());
|
||||||
var expectedMessage = $"Path '{path}' was not rooted.";
|
var expectedMessage = $"Path '{path}' was not rooted.";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -204,5 +208,22 @@ namespace Microsoft.AspNet.Mvc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static IServiceCollection CreateServices()
|
||||||
|
{
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
services.AddInstance<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HttpContext GetHttpContext()
|
||||||
|
{
|
||||||
|
var services = CreateServices();
|
||||||
|
|
||||||
|
var httpContext = new DefaultHttpContext();
|
||||||
|
httpContext.RequestServices = services.BuildServiceProvider();
|
||||||
|
|
||||||
|
return httpContext;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -8,6 +8,7 @@ using Microsoft.AspNet.Mvc.Infrastructure;
|
||||||
using Microsoft.AspNet.Mvc.Routing;
|
using Microsoft.AspNet.Mvc.Routing;
|
||||||
using Microsoft.AspNet.Routing;
|
using Microsoft.AspNet.Routing;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
|
|
@ -110,6 +111,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
var serviceCollection = new ServiceCollection();
|
var serviceCollection = new ServiceCollection();
|
||||||
serviceCollection.AddInstance<IUrlHelper>(urlHelper);
|
serviceCollection.AddInstance<IUrlHelper>(urlHelper);
|
||||||
|
serviceCollection.AddTransient<ILoggerFactory, LoggerFactory>();
|
||||||
return serviceCollection.BuildServiceProvider();
|
return serviceCollection.BuildServiceProvider();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,9 @@ using Microsoft.AspNet.Mvc.Abstractions;
|
||||||
using Microsoft.AspNet.Mvc.Routing;
|
using Microsoft.AspNet.Mvc.Routing;
|
||||||
using Microsoft.AspNet.Routing;
|
using Microsoft.AspNet.Routing;
|
||||||
using Microsoft.AspNet.Testing;
|
using Microsoft.AspNet.Testing;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
|
|
@ -21,13 +24,19 @@ namespace Microsoft.AspNet.Mvc
|
||||||
// Arrange
|
// Arrange
|
||||||
var expectedUrl = "SampleAction";
|
var expectedUrl = "SampleAction";
|
||||||
var expectedPermanentFlag = false;
|
var expectedPermanentFlag = false;
|
||||||
var httpContext = new Mock<HttpContext>();
|
|
||||||
var httpResponse = new Mock<HttpResponse>();
|
|
||||||
httpContext.Setup(o => o.Response).Returns(httpResponse.Object);
|
|
||||||
|
|
||||||
var actionContext = new ActionContext(httpContext.Object,
|
var httpContext = new Mock<HttpContext>();
|
||||||
new RouteData(),
|
httpContext
|
||||||
new ActionDescriptor());
|
.SetupGet(o => o.RequestServices)
|
||||||
|
.Returns(CreateServices().BuildServiceProvider());
|
||||||
|
|
||||||
|
var httpResponse = new Mock<HttpResponse>();
|
||||||
|
httpContext
|
||||||
|
.Setup(o => o.Response)
|
||||||
|
.Returns(httpResponse.Object);
|
||||||
|
|
||||||
|
var actionContext = new ActionContext(httpContext.Object, new RouteData(), new ActionDescriptor());
|
||||||
|
|
||||||
var urlHelper = GetMockUrlHelper(expectedUrl);
|
var urlHelper = GetMockUrlHelper(expectedUrl);
|
||||||
var result = new RedirectToActionResult("SampleAction", null, null)
|
var result = new RedirectToActionResult("SampleAction", null, null)
|
||||||
{
|
{
|
||||||
|
|
@ -49,10 +58,14 @@ namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var httpContext = new Mock<HttpContext>();
|
var httpContext = new Mock<HttpContext>();
|
||||||
httpContext.Setup(o => o.Response).Returns(new Mock<HttpResponse>().Object);
|
httpContext
|
||||||
var actionContext = new ActionContext(httpContext.Object,
|
.Setup(o => o.Response)
|
||||||
new RouteData(),
|
.Returns(new Mock<HttpResponse>().Object);
|
||||||
new ActionDescriptor());
|
httpContext
|
||||||
|
.SetupGet(o => o.RequestServices)
|
||||||
|
.Returns(CreateServices().BuildServiceProvider());
|
||||||
|
|
||||||
|
var actionContext = new ActionContext(httpContext.Object, new RouteData(), new ActionDescriptor());
|
||||||
|
|
||||||
var urlHelper = GetMockUrlHelper(returnValue: null);
|
var urlHelper = GetMockUrlHelper(returnValue: null);
|
||||||
var result = new RedirectToActionResult(null, null, null)
|
var result = new RedirectToActionResult(null, null, null)
|
||||||
|
|
@ -76,5 +89,12 @@ namespace Microsoft.AspNet.Mvc
|
||||||
|
|
||||||
return urlHelper.Object;
|
return urlHelper.Object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static IServiceCollection CreateServices()
|
||||||
|
{
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
services.AddInstance<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
|
return services;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,10 @@ using Microsoft.AspNet.Mvc.Abstractions;
|
||||||
using Microsoft.AspNet.Mvc.Routing;
|
using Microsoft.AspNet.Mvc.Routing;
|
||||||
using Microsoft.AspNet.Routing;
|
using Microsoft.AspNet.Routing;
|
||||||
using Microsoft.AspNet.Testing;
|
using Microsoft.AspNet.Testing;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Internal;
|
using Microsoft.Extensions.Internal;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
|
|
@ -25,7 +28,10 @@ namespace Microsoft.AspNet.Mvc
|
||||||
// Arrange
|
// Arrange
|
||||||
var expectedUrl = "SampleAction";
|
var expectedUrl = "SampleAction";
|
||||||
var expectedPermanentFlag = false;
|
var expectedPermanentFlag = false;
|
||||||
|
|
||||||
var httpContext = new Mock<HttpContext>();
|
var httpContext = new Mock<HttpContext>();
|
||||||
|
httpContext.SetupGet(o => o.RequestServices).Returns(CreateServices().BuildServiceProvider());
|
||||||
|
|
||||||
var httpResponse = new Mock<HttpResponse>();
|
var httpResponse = new Mock<HttpResponse>();
|
||||||
httpContext.Setup(o => o.Response).Returns(httpResponse.Object);
|
httpContext.Setup(o => o.Response).Returns(httpResponse.Object);
|
||||||
|
|
||||||
|
|
@ -54,10 +60,14 @@ namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var httpContext = new Mock<HttpContext>();
|
var httpContext = new Mock<HttpContext>();
|
||||||
httpContext.Setup(o => o.Response).Returns(new Mock<HttpResponse>().Object);
|
httpContext
|
||||||
var actionContext = new ActionContext(httpContext.Object,
|
.Setup(o => o.Response)
|
||||||
new RouteData(),
|
.Returns(new Mock<HttpResponse>().Object);
|
||||||
new ActionDescriptor());
|
httpContext
|
||||||
|
.SetupGet(o => o.RequestServices)
|
||||||
|
.Returns(CreateServices().BuildServiceProvider());
|
||||||
|
|
||||||
|
var actionContext = new ActionContext(httpContext.Object, new RouteData(), new ActionDescriptor());
|
||||||
|
|
||||||
var urlHelper = GetMockUrlHelper(returnValue: null);
|
var urlHelper = GetMockUrlHelper(returnValue: null);
|
||||||
var result = new RedirectToRouteResult(null, new Dictionary<string, object>())
|
var result = new RedirectToRouteResult(null, new Dictionary<string, object>())
|
||||||
|
|
@ -86,10 +96,16 @@ namespace Microsoft.AspNet.Mvc
|
||||||
.Verifiable();
|
.Verifiable();
|
||||||
|
|
||||||
var serviceProvider = new Mock<IServiceProvider>();
|
var serviceProvider = new Mock<IServiceProvider>();
|
||||||
serviceProvider.Setup(sp => sp.GetService(typeof(IUrlHelper)))
|
serviceProvider
|
||||||
|
.Setup(sp => sp.GetService(typeof(IUrlHelper)))
|
||||||
.Returns(urlHelper.Object);
|
.Returns(urlHelper.Object);
|
||||||
var httpContext = new DefaultHttpContext();
|
serviceProvider
|
||||||
|
.Setup(sp => sp.GetService(typeof(ILoggerFactory)))
|
||||||
|
.Returns(NullLoggerFactory.Instance);
|
||||||
|
|
||||||
|
var httpContext = GetHttpContext();
|
||||||
httpContext.RequestServices = serviceProvider.Object;
|
httpContext.RequestServices = serviceProvider.Object;
|
||||||
|
|
||||||
var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
||||||
var result = new RedirectToRouteResult(routeName, new { id = 10 });
|
var result = new RedirectToRouteResult(routeName, new { id = 10 });
|
||||||
|
|
||||||
|
|
@ -103,6 +119,23 @@ namespace Microsoft.AspNet.Mvc
|
||||||
Assert.Equal(locationUrl, httpContext.Response.Headers["Location"]);
|
Assert.Equal(locationUrl, httpContext.Response.Headers["Location"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static HttpContext GetHttpContext()
|
||||||
|
{
|
||||||
|
var services = CreateServices();
|
||||||
|
|
||||||
|
var httpContext = new DefaultHttpContext();
|
||||||
|
httpContext.RequestServices = services.BuildServiceProvider();
|
||||||
|
|
||||||
|
return httpContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IServiceCollection CreateServices()
|
||||||
|
{
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
services.AddInstance<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
|
||||||
public static IEnumerable<object[]> RedirectToRouteData
|
public static IEnumerable<object[]> RedirectToRouteData
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
|
|
||||||
|
|
@ -7,11 +7,14 @@ using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNet.FileProviders;
|
using Microsoft.AspNet.FileProviders;
|
||||||
using Microsoft.AspNet.Hosting;
|
using Microsoft.AspNet.Hosting;
|
||||||
|
using Microsoft.AspNet.Http;
|
||||||
using Microsoft.AspNet.Http.Features;
|
using Microsoft.AspNet.Http.Features;
|
||||||
using Microsoft.AspNet.Http.Internal;
|
using Microsoft.AspNet.Http.Internal;
|
||||||
using Microsoft.AspNet.Mvc.Abstractions;
|
using Microsoft.AspNet.Mvc.Abstractions;
|
||||||
using Microsoft.AspNet.Routing;
|
using Microsoft.AspNet.Routing;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
@ -44,10 +47,11 @@ namespace Microsoft.AspNet.Mvc
|
||||||
appEnvironment.Setup(app => app.WebRootFileProvider)
|
appEnvironment.Setup(app => app.WebRootFileProvider)
|
||||||
.Returns(GetFileProvider(path));
|
.Returns(GetFileProvider(path));
|
||||||
|
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
httpContext.Response.Body = new MemoryStream();
|
httpContext.Response.Body = new MemoryStream();
|
||||||
httpContext.RequestServices = new ServiceCollection()
|
httpContext.RequestServices = new ServiceCollection()
|
||||||
.AddInstance<IHostingEnvironment>(appEnvironment.Object)
|
.AddInstance<IHostingEnvironment>(appEnvironment.Object)
|
||||||
|
.AddTransient<ILoggerFactory, LoggerFactory>()
|
||||||
.BuildServiceProvider();
|
.BuildServiceProvider();
|
||||||
var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
||||||
|
|
||||||
|
|
@ -71,7 +75,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
FileProvider = GetFileProvider(path),
|
FileProvider = GetFileProvider(path),
|
||||||
};
|
};
|
||||||
|
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
httpContext.Response.Body = new MemoryStream();
|
httpContext.Response.Body = new MemoryStream();
|
||||||
var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
||||||
|
|
||||||
|
|
@ -100,7 +104,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
.Setup(s => s.SendFileAsync(path, 0, null, CancellationToken.None))
|
.Setup(s => s.SendFileAsync(path, 0, null, CancellationToken.None))
|
||||||
.Returns(Task.FromResult<int>(0));
|
.Returns(Task.FromResult<int>(0));
|
||||||
|
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
httpContext.Features.Set(sendFileMock.Object);
|
httpContext.Features.Set(sendFileMock.Object);
|
||||||
var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
||||||
|
|
||||||
|
|
@ -123,7 +127,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
IsAscii = true,
|
IsAscii = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
var memoryStream = new MemoryStream();
|
var memoryStream = new MemoryStream();
|
||||||
httpContext.Response.Body = memoryStream;
|
httpContext.Response.Body = memoryStream;
|
||||||
var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
||||||
|
|
@ -147,7 +151,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
FileProvider = GetFileProvider(path),
|
FileProvider = GetFileProvider(path),
|
||||||
};
|
};
|
||||||
|
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
httpContext.Response.Body = new MemoryStream();
|
httpContext.Response.Body = new MemoryStream();
|
||||||
var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
var context = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
||||||
|
|
||||||
|
|
@ -175,7 +179,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
FileProvider = GetFileProvider(path),
|
FileProvider = GetFileProvider(path),
|
||||||
};
|
};
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
var memoryStream = new MemoryStream();
|
var memoryStream = new MemoryStream();
|
||||||
httpContext.Response.Body = memoryStream;
|
httpContext.Response.Body = memoryStream;
|
||||||
|
|
||||||
|
|
@ -194,7 +198,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
public async Task ExecuteResultAsync_WorksWithNonDiskBasedFiles()
|
public async Task ExecuteResultAsync_WorksWithNonDiskBasedFiles()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = GetHttpContext();
|
||||||
httpContext.Response.Body = new MemoryStream();
|
httpContext.Response.Body = new MemoryStream();
|
||||||
var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());
|
||||||
var expectedData = "This is an embedded resource";
|
var expectedData = "This is an embedded resource";
|
||||||
|
|
@ -249,7 +253,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
};
|
};
|
||||||
|
|
||||||
var expectedMessage = "Could not find file: " + path;
|
var expectedMessage = "Could not find file: " + path;
|
||||||
var context = new ActionContext(new DefaultHttpContext(), new RouteData(), new ActionDescriptor());
|
var context = new ActionContext(GetHttpContext(), new RouteData(), new ActionDescriptor());
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var ex = await Assert.ThrowsAsync<FileNotFoundException>(() => filePathResult.ExecuteResultAsync(context));
|
var ex = await Assert.ThrowsAsync<FileNotFoundException>(() => filePathResult.ExecuteResultAsync(context));
|
||||||
|
|
@ -286,6 +290,25 @@ namespace Microsoft.AspNet.Mvc
|
||||||
Assert.ThrowsAsync<DirectoryNotFoundException>(() => filePathResult.ExecuteResultAsync(context));
|
Assert.ThrowsAsync<DirectoryNotFoundException>(() => filePathResult.ExecuteResultAsync(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static IServiceCollection CreateServices()
|
||||||
|
{
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
|
||||||
|
services.AddInstance<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
|
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HttpContext GetHttpContext()
|
||||||
|
{
|
||||||
|
var services = CreateServices();
|
||||||
|
|
||||||
|
var httpContext = new DefaultHttpContext();
|
||||||
|
httpContext.RequestServices = services.BuildServiceProvider();
|
||||||
|
|
||||||
|
return httpContext;
|
||||||
|
}
|
||||||
|
|
||||||
private IFileProvider GetFileProvider(string path)
|
private IFileProvider GetFileProvider(string path)
|
||||||
{
|
{
|
||||||
var fileInfo = new Mock<IFileInfo>();
|
var fileInfo = new Mock<IFileInfo>();
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,9 @@ using Microsoft.AspNet.Http.Internal;
|
||||||
using Microsoft.AspNet.Mvc.Abstractions;
|
using Microsoft.AspNet.Mvc.Abstractions;
|
||||||
using Microsoft.AspNet.Mvc.Filters;
|
using Microsoft.AspNet.Mvc.Filters;
|
||||||
using Microsoft.AspNet.Routing;
|
using Microsoft.AspNet.Routing;
|
||||||
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
|
|
@ -140,6 +143,10 @@ namespace Microsoft.AspNet.Mvc.Cors
|
||||||
httpContext.Request.Headers.Add(CorsConstants.Origin, new[] { headers.Origin });
|
httpContext.Request.Headers.Add(CorsConstants.Origin, new[] { headers.Origin });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
services.AddInstance<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
|
httpContext.RequestServices = services.BuildServiceProvider();
|
||||||
|
|
||||||
var method = isPreflight ? CorsConstants.PreflightHttpMethod : "GET";
|
var method = isPreflight ? CorsConstants.PreflightHttpMethod : "GET";
|
||||||
httpContext.Request.Method = method;
|
httpContext.Request.Method = method;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ using Microsoft.AspNet.Http.Internal;
|
||||||
using Microsoft.AspNet.Mvc.Abstractions;
|
using Microsoft.AspNet.Mvc.Abstractions;
|
||||||
using Microsoft.AspNet.Routing;
|
using Microsoft.AspNet.Routing;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
@ -128,8 +130,10 @@ namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
var httpContext = new DefaultHttpContext();
|
var httpContext = new DefaultHttpContext();
|
||||||
httpContext.Response.Body = new MemoryStream();
|
httpContext.Response.Body = new MemoryStream();
|
||||||
|
|
||||||
var services = new ServiceCollection();
|
var services = new ServiceCollection();
|
||||||
services.AddOptions();
|
services.AddOptions();
|
||||||
|
services.AddInstance<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
httpContext.RequestServices = services.BuildServiceProvider();
|
httpContext.RequestServices = services.BuildServiceProvider();
|
||||||
|
|
||||||
return httpContext;
|
return httpContext;
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,11 @@ namespace Microsoft.AspNet.Mvc
|
||||||
.Setup(v => v.Dispose())
|
.Setup(v => v.Dispose())
|
||||||
.Verifiable();
|
.Verifiable();
|
||||||
|
|
||||||
|
// Used by logging
|
||||||
|
view
|
||||||
|
.SetupGet(v => v.Path)
|
||||||
|
.Returns("myview.cshtml");
|
||||||
|
|
||||||
var viewEngine = new Mock<IViewEngine>(MockBehavior.Strict);
|
var viewEngine = new Mock<IViewEngine>(MockBehavior.Strict);
|
||||||
viewEngine
|
viewEngine
|
||||||
.Setup(e => e.FindPartialView(context, "myview"))
|
.Setup(e => e.FindPartialView(context, "myview"))
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,8 @@ using Microsoft.AspNet.Mvc.ViewComponents;
|
||||||
using Microsoft.AspNet.Mvc.ViewFeatures;
|
using Microsoft.AspNet.Mvc.ViewFeatures;
|
||||||
using Microsoft.AspNet.Routing;
|
using Microsoft.AspNet.Routing;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
using Microsoft.Extensions.OptionsModel;
|
using Microsoft.Extensions.OptionsModel;
|
||||||
using Microsoft.Net.Http.Headers;
|
using Microsoft.Net.Http.Headers;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
@ -397,6 +399,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
services.AddSingleton<IViewComponentActivator, DefaultViewComponentActivator>();
|
services.AddSingleton<IViewComponentActivator, DefaultViewComponentActivator>();
|
||||||
services.AddInstance<IViewComponentDescriptorProvider>(new FixedSetViewComponentDescriptorProvider(descriptors));
|
services.AddInstance<IViewComponentDescriptorProvider>(new FixedSetViewComponentDescriptorProvider(descriptors));
|
||||||
services.AddSingleton<IModelMetadataProvider, EmptyModelMetadataProvider>();
|
services.AddSingleton<IModelMetadataProvider, EmptyModelMetadataProvider>();
|
||||||
|
services.AddInstance<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
|
|
||||||
return services;
|
return services;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,10 @@ namespace Microsoft.AspNet.Mvc
|
||||||
.Setup(v => v.Dispose())
|
.Setup(v => v.Dispose())
|
||||||
.Verifiable();
|
.Verifiable();
|
||||||
|
|
||||||
|
view
|
||||||
|
.Setup(v => v.Path)
|
||||||
|
.Returns("//location");
|
||||||
|
|
||||||
var viewEngine = new Mock<IViewEngine>(MockBehavior.Strict);
|
var viewEngine = new Mock<IViewEngine>(MockBehavior.Strict);
|
||||||
viewEngine
|
viewEngine
|
||||||
.Setup(e => e.FindView(context, "myview"))
|
.Setup(e => e.FindView(context, "myview"))
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,9 @@ using Microsoft.AspNet.Http.Internal;
|
||||||
using Microsoft.AspNet.Mvc;
|
using Microsoft.AspNet.Mvc;
|
||||||
using Microsoft.AspNet.Mvc.Abstractions;
|
using Microsoft.AspNet.Mvc.Abstractions;
|
||||||
using Microsoft.AspNet.Routing;
|
using Microsoft.AspNet.Routing;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
|
using Microsoft.Framework.DependencyInjection;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace System.Web.Http
|
namespace System.Web.Http
|
||||||
|
|
@ -17,7 +20,7 @@ namespace System.Web.Http
|
||||||
public async Task ConflictResult_SetsStatusCode()
|
public async Task ConflictResult_SetsStatusCode()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var context = new ActionContext(new DefaultHttpContext(), new RouteData(), new ActionDescriptor());
|
var context = new ActionContext(GetHttpContext(), new RouteData(), new ActionDescriptor());
|
||||||
var result = new ConflictResult();
|
var result = new ConflictResult();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -26,5 +29,24 @@ namespace System.Web.Http
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(StatusCodes.Status409Conflict, context.HttpContext.Response.StatusCode);
|
Assert.Equal(StatusCodes.Status409Conflict, context.HttpContext.Response.StatusCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static IServiceCollection CreateServices()
|
||||||
|
{
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
|
||||||
|
services.AddInstance<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
|
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HttpContext GetHttpContext()
|
||||||
|
{
|
||||||
|
var services = CreateServices();
|
||||||
|
|
||||||
|
var httpContext = new DefaultHttpContext();
|
||||||
|
httpContext.RequestServices = services.BuildServiceProvider();
|
||||||
|
|
||||||
|
return httpContext;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,9 @@ using Microsoft.AspNet.Http.Internal;
|
||||||
using Microsoft.AspNet.Mvc;
|
using Microsoft.AspNet.Mvc;
|
||||||
using Microsoft.AspNet.Mvc.Abstractions;
|
using Microsoft.AspNet.Mvc.Abstractions;
|
||||||
using Microsoft.AspNet.Routing;
|
using Microsoft.AspNet.Routing;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Logging.Testing;
|
||||||
|
using Microsoft.Framework.DependencyInjection;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace System.Web.Http
|
namespace System.Web.Http
|
||||||
|
|
@ -17,7 +20,7 @@ namespace System.Web.Http
|
||||||
public async Task InternalServerErrorResult_SetsStatusCode()
|
public async Task InternalServerErrorResult_SetsStatusCode()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var context = new ActionContext(new DefaultHttpContext(), new RouteData(), new ActionDescriptor());
|
var context = new ActionContext(GetHttpContext(), new RouteData(), new ActionDescriptor());
|
||||||
var result = new InternalServerErrorResult();
|
var result = new InternalServerErrorResult();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
|
|
@ -26,5 +29,24 @@ namespace System.Web.Http
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(StatusCodes.Status500InternalServerError, context.HttpContext.Response.StatusCode);
|
Assert.Equal(StatusCodes.Status500InternalServerError, context.HttpContext.Response.StatusCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static IServiceCollection CreateServices()
|
||||||
|
{
|
||||||
|
var services = new ServiceCollection();
|
||||||
|
|
||||||
|
services.AddInstance<ILoggerFactory>(NullLoggerFactory.Instance);
|
||||||
|
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static HttpContext GetHttpContext()
|
||||||
|
{
|
||||||
|
var services = CreateServices();
|
||||||
|
|
||||||
|
var httpContext = new DefaultHttpContext();
|
||||||
|
httpContext.RequestServices = services.BuildServiceProvider();
|
||||||
|
|
||||||
|
return httpContext;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue