Added printing of route values when a route is not matched
This commit is contained in:
parent
17dc23a024
commit
d44c9aee1e
|
|
@ -78,7 +78,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
var actionDescriptor = _actionSelector.SelectBestCandidate(context, Actions);
|
var actionDescriptor = _actionSelector.SelectBestCandidate(context, Actions);
|
||||||
if (actionDescriptor == null)
|
if (actionDescriptor == null)
|
||||||
{
|
{
|
||||||
_logger.NoActionsMatched();
|
_logger.NoActionsMatched(context.RouteData.Values);
|
||||||
return TaskCache.CompletedTask;
|
return TaskCache.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -67,6 +67,8 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
|
|
||||||
private static readonly Action<ILogger, string, string, Exception> _redirectToRouteResultExecuting;
|
private static readonly Action<ILogger, string, string, Exception> _redirectToRouteResultExecuting;
|
||||||
|
|
||||||
|
private static readonly Action<ILogger, string[], Exception> _noActionsMatched;
|
||||||
|
|
||||||
static MvcCoreLoggerExtensions()
|
static MvcCoreLoggerExtensions()
|
||||||
{
|
{
|
||||||
_actionExecuting = LoggerMessage.Define<string>(
|
_actionExecuting = LoggerMessage.Define<string>(
|
||||||
|
|
@ -223,6 +225,11 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
LogLevel.Information,
|
LogLevel.Information,
|
||||||
1,
|
1,
|
||||||
"Executing RedirectToRouteResult, redirecting to {Destination} from route {RouteName}.");
|
"Executing RedirectToRouteResult, redirecting to {Destination} from route {RouteName}.");
|
||||||
|
|
||||||
|
_noActionsMatched = LoggerMessage.Define<string[]>(
|
||||||
|
LogLevel.Debug,
|
||||||
|
3,
|
||||||
|
"No actions matched the current request. Route values: {RouteValues}");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IDisposable ActionScope(this ILogger logger, ActionDescriptor action)
|
public static IDisposable ActionScope(this ILogger logger, ActionDescriptor action)
|
||||||
|
|
@ -250,9 +257,19 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void NoActionsMatched(this ILogger logger)
|
public static void NoActionsMatched(this ILogger logger, IDictionary<string, object> routeValueDictionary)
|
||||||
{
|
{
|
||||||
logger.LogDebug(3, "No actions matched the current request");
|
if (logger.IsEnabled(LogLevel.Debug))
|
||||||
|
{
|
||||||
|
string[] routeValues = null;
|
||||||
|
if (routeValueDictionary != null)
|
||||||
|
{
|
||||||
|
routeValues = routeValueDictionary
|
||||||
|
.Select(pair => pair.Key + "=" + Convert.ToString(pair.Value))
|
||||||
|
.ToArray();
|
||||||
|
}
|
||||||
|
_noActionsMatched(logger, routeValues, null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ChallengeResultExecuting(this ILogger logger, IList<string> schemes)
|
public static void ChallengeResultExecuting(this ILogger logger, IList<string> schemes)
|
||||||
|
|
|
||||||
|
|
@ -66,14 +66,14 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
||||||
var candidates = _actionSelector.SelectCandidates(context);
|
var candidates = _actionSelector.SelectCandidates(context);
|
||||||
if (candidates == null || candidates.Count == 0)
|
if (candidates == null || candidates.Count == 0)
|
||||||
{
|
{
|
||||||
_logger.NoActionsMatched();
|
_logger.NoActionsMatched(context.RouteData.Values);
|
||||||
return TaskCache.CompletedTask;
|
return TaskCache.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
var actionDescriptor = _actionSelector.SelectBestCandidate(context, candidates);
|
var actionDescriptor = _actionSelector.SelectBestCandidate(context, candidates);
|
||||||
if (actionDescriptor == null)
|
if (actionDescriptor == null)
|
||||||
{
|
{
|
||||||
_logger.NoActionsMatched();
|
_logger.NoActionsMatched(context.RouteData.Values);
|
||||||
return TaskCache.CompletedTask;
|
return TaskCache.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,12 +30,14 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
|
||||||
.Returns(new ActionDescriptor[0]);
|
.Returns(new ActionDescriptor[0]);
|
||||||
|
|
||||||
var context = CreateRouteContext();
|
var context = CreateRouteContext();
|
||||||
|
context.RouteData.Values.Add("controller", "Home");
|
||||||
|
context.RouteData.Values.Add("action", "Index");
|
||||||
|
|
||||||
var handler = CreateMvcRouteHandler(
|
var handler = CreateMvcRouteHandler(
|
||||||
actionSelector: mockActionSelector.Object,
|
actionSelector: mockActionSelector.Object,
|
||||||
loggerFactory: loggerFactory);
|
loggerFactory: loggerFactory);
|
||||||
|
|
||||||
var expectedMessage = "No actions matched the current request";
|
var expectedMessage = "No actions matched the current request. Route values: controller=Home, action=Index";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await handler.RouteAsync(context);
|
await handler.RouteAsync(context);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue