我需要将以下 URL 路由到控制器:
- /de/flight-伦敦
- /de/flight-圣彼得堡
在 Global.asax 中定义的正确 URL-Mapping-String 是什么?
我努力了:
- "{countrycode}/{keyword}-{destination}" -> 适合 1 但不适合 2
- "{countrycode}/{keyword}-{*destination}" -> 例外!
我希望有一个人可以帮助我。
我需要将以下 URL 路由到控制器:
在 Global.asax 中定义的正确 URL-Mapping-String 是什么?
我努力了:
我希望有一个人可以帮助我。
/de/flight-st-petersburg
由于已知错误而无法正常工作。您有 2 个选项:
{countrycode}/{keyword}/{destination}
.
class CustomIdentifier {
public const string Pattern = @"(.+?)-(.+)";
static readonly Regex Regex = new Regex(Pattern);
public string Keyword { get; private set; }
public string Value { get; private set; }
public static CustomIdentifier Parse(string identifier) {
if (identifier == null) throw new ArgumentNullException("identifier");
Match match = Regex.Match(identifier);
if (!match.Success)
throw new ArgumentException("identifier is invalid.", "identifier");
return new CustomIdentifier {
Keyword = match.Groups[1].Value,
Value = match.Groups[2].Value
};
}
}
class CustomIdentifierModelBinder : IModelBinder {
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
return CustomIdentifier.Parse(
(string)bindingContext.ValueProvider.GetValue(bindingContext.ModelName).RawValue
);
}
}
然后在 Application_Start 上注册它:
void RegisterModelBinders(ModelBinderDictionary binders) {
binders.Add(typeof(CustomIdentifier), new CustomIdentifierModelBinder());
}
使用以下路线:
routes.MapRoute(null, "{countryCode}/{id}",
new { },
new { id = CustomIdentifier.Pattern });
而你的行动:
public ActionResult Flight(CustomIdentifier id) {
}
路线部分由斜杠分隔,因此您需要使用我相信的:
{countrycode}/{keyword}/{*destination}