private static void ReplaceAttributeRouteTokens( ControllerActionDescriptor actionDescriptor, IList <string> routeTemplateErrors) { try { actionDescriptor.AttributeRouteInfo.Template = AttributeRouteModel.ReplaceTokens( actionDescriptor.AttributeRouteInfo.Template, actionDescriptor.RouteValueDefaults); if (actionDescriptor.AttributeRouteInfo.Name != null) { actionDescriptor.AttributeRouteInfo.Name = AttributeRouteModel.ReplaceTokens( actionDescriptor.AttributeRouteInfo.Name, actionDescriptor.RouteValueDefaults); } } catch (InvalidOperationException ex) { // Routing will throw an InvalidOperationException here if we can't parse/replace tokens // in the template. var message = Resources.FormatAttributeRoute_IndividualErrorMessage( actionDescriptor.DisplayName, Environment.NewLine, ex.Message); routeTemplateErrors.Add(message); } }
private static void ReplaceAttributeRouteTokens( ControllerActionDescriptor actionDescriptor, IList <string> routeTemplateErrors) { try { actionDescriptor.Properties.TryGetValue(typeof(IOutboundParameterTransformer), out var transformer); var routeTokenTransformer = transformer as IOutboundParameterTransformer; actionDescriptor.AttributeRouteInfo.Template = AttributeRouteModel.ReplaceTokens( actionDescriptor.AttributeRouteInfo.Template, actionDescriptor.RouteValues, routeTokenTransformer); if (actionDescriptor.AttributeRouteInfo.Name != null) { actionDescriptor.AttributeRouteInfo.Name = AttributeRouteModel.ReplaceTokens( actionDescriptor.AttributeRouteInfo.Name, actionDescriptor.RouteValues, routeTokenTransformer); } } catch (InvalidOperationException ex) { // Routing will throw an InvalidOperationException here if we can't parse/replace tokens // in the template. var message = Resources.FormatAttributeRoute_IndividualErrorMessage( actionDescriptor.DisplayName, Environment.NewLine, ex.Message); routeTemplateErrors.Add(message); } }
public void ReplaceTokens_ValidValues(string template, Dictionary <string, string> values, string expected) { // Arrange // Act var result = AttributeRouteModel.ReplaceTokens(template, values); // Assert Assert.Equal(expected, result); }
private static void ReplaceAttributeRouteTokens( ControllerModel controller, ActionModel action, SelectorModel selector, List <string> errors) { if (selector.AttributeRouteModel == null) { return; } try { var routeValues = new Dictionary <string, string?>(StringComparer.OrdinalIgnoreCase) { { "action", action.ActionName }, { "controller", controller.ControllerName }, }; foreach (var kvp in action.RouteValues) { routeValues.TryAdd(kvp.Key, kvp.Value); } foreach (var kvp in controller.RouteValues) { routeValues.TryAdd(kvp.Key, kvp.Value); } selector.AttributeRouteModel.Template = AttributeRouteModel.ReplaceTokens( selector.AttributeRouteModel.Template !, routeValues, action.RouteParameterTransformer); if (selector.AttributeRouteModel.Name != null) { selector.AttributeRouteModel.Name = AttributeRouteModel.ReplaceTokens( selector.AttributeRouteModel.Name, routeValues, action.RouteParameterTransformer); } } catch (InvalidOperationException ex) { // Routing will throw an InvalidOperationException here if we can't parse/replace tokens // in the template. var message = Resources.FormatAttributeRoute_IndividualErrorMessage( action.DisplayName, Environment.NewLine, ex.Message); errors.Add(message); } }
public void ReplaceTokens_InvalidFormat(string template, Dictionary <string, string> values, string reason) { // Arrange var expected = string.Format( CultureInfo.InvariantCulture, "The route template '{0}' has invalid syntax. {1}", template, reason); // Act var ex = Assert.Throws <InvalidOperationException>( () => { AttributeRouteModel.ReplaceTokens(template, values); }); // Assert Assert.Equal(expected, ex.Message); }
private static void ReplaceAttributeRouteTokens( ControllerActionDescriptor actionDescriptor, IList <string> routeTemplateErrors) { try { actionDescriptor.AttributeRouteInfo.Template = AttributeRouteModel.ReplaceTokens( actionDescriptor.AttributeRouteInfo.Template, actionDescriptor.RouteValueDefaults); } catch (InvalidOperationException ex) { var message = Resources.FormatAttributeRoute_IndividualErrorMessage( actionDescriptor.DisplayName, Environment.NewLine, ex.Message); routeTemplateErrors.Add(message); } }
public void ReplaceTokens_UnknownValue(string template, string token) { // Arrange var values = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase) { { "area", "Help" }, { "controller", "Admin" }, { "action", "SeeUsers" }, }; var expected = $"While processing template '{template}', " + $"a replacement value for the token '{token}' could not be found. " + "Available tokens: 'action, area, controller'. To use a '[' or ']' as a literal string in a " + "route or within a constraint, use '[[' or ']]' instead."; // Act var ex = Assert.Throws <InvalidOperationException>( () => { AttributeRouteModel.ReplaceTokens(template, values); }); // Assert Assert.Equal(expected, ex.Message); }