本文整理汇总了C#中RouteValueDictionary.GetValue方法的典型用法代码示例。如果您正苦于以下问题:C# RouteValueDictionary.GetValue方法的具体用法?C# RouteValueDictionary.GetValue怎么用?C# RouteValueDictionary.GetValue使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类RouteValueDictionary
的用法示例。
在下文中一共展示了RouteValueDictionary.GetValue方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: BuildUrl
public bool BuildUrl (Route route, RequestContext requestContext, RouteValueDictionary userValues, out string value)
{
value = null;
if (requestContext == null)
return false;
RouteData routeData = requestContext.RouteData;
RouteValueDictionary defaultValues = route != null ? route.Defaults : null;
RouteValueDictionary ambientValues = routeData.Values;
if (defaultValues != null && defaultValues.Count == 0)
defaultValues = null;
if (ambientValues != null && ambientValues.Count == 0)
ambientValues = null;
if (userValues != null && userValues.Count == 0)
userValues = null;
// Check URL parameters
// It is allowed to take ambient values for required parameters if:
//
// - there are no default values provided
// - the default values dictionary contains at least one required
// parameter value
//
bool canTakeFromAmbient;
if (defaultValues == null)
canTakeFromAmbient = true;
else {
canTakeFromAmbient = false;
foreach (KeyValuePair <string, bool> de in parameterNames) {
if (defaultValues.ContainsKey (de.Key)) {
canTakeFromAmbient = true;
break;
}
}
}
bool allMustBeInUserValues = false;
foreach (KeyValuePair <string, bool> de in parameterNames) {
string parameterName = de.Key;
// Is the parameter required?
if (defaultValues == null || !defaultValues.ContainsKey (parameterName)) {
// Yes, it is required (no value in defaults)
// Has the user provided value for it?
if (userValues == null || !userValues.ContainsKey (parameterName)) {
if (allMustBeInUserValues)
return false; // partial override => no match
if (!canTakeFromAmbient || ambientValues == null || !ambientValues.ContainsKey (parameterName))
return false; // no value provided => no match
} else if (canTakeFromAmbient)
allMustBeInUserValues = true;
}
}
// Check for non-url parameters
if (defaultValues != null) {
foreach (var de in defaultValues) {
string parameterName = de.Key;
if (parameterNames.ContainsKey (parameterName))
continue;
object parameterValue = null;
// Has the user specified value for this parameter and, if
// yes, is it the same as the one in defaults?
if (userValues != null && userValues.TryGetValue (parameterName, out parameterValue)) {
object defaultValue = de.Value;
if (defaultValue is string && parameterValue is string) {
if (String.Compare ((string)defaultValue, (string)parameterValue, StringComparison.Ordinal) != 0)
return false; // different value => no match
} else if (defaultValue != parameterValue)
return false; // different value => no match
}
}
}
// Check the constraints
RouteValueDictionary constraints = route != null ? route.Constraints : null;
if (constraints != null && constraints.Count > 0) {
HttpContextBase context = requestContext.HttpContext;
bool invalidConstraint;
foreach (var de in constraints) {
if (!Route.ProcessConstraintInternal (context, route, de.Value, de.Key, userValues, RouteDirection.UrlGeneration, requestContext, out invalidConstraint) ||
invalidConstraint)
return false; // constraint not met => no match
}
}
// We're a match, generate the URL
var ret = new StringBuilder ();
bool canTrim = true;
// Going in reverse order, so that we can trim without much ado
int tokensCount = tokens.Length - 1;
for (int i = tokensCount; i >= 0; i--) {
PatternToken token = tokens [i];
if (token == null) {
if (i < tokensCount && ret.Length > 0 && ret [0] != '/')
//.........这里部分代码省略.........