Comment puis-je itinéraire d'une URL avec un querystring dans ASP.NET MVC?
Je suis en train de configurer un itinéraire personnalisé en MVC pour prendre une URL à partir d'un autre système dans le format suivant:
../ABC/ABC01?Key=123&Group=456
Le 01 après la seconde ABC est un numéro de l'étape, cela va changer et la Clé de Groupe et les paramètres de changement. J'ai besoin de cette route à une seule action dans un contrôleur avec le numéro de l'étape clé de groupe et en tant que paramètres. J'ai tenté le code suivant cependant, il déclenche une exception:
Code:
routes.MapRoute(
"OpenCase",
"ABC/ABC{stepNo}?Key={key}&Group={group}",
new {controller = "ABC1", action = "OpenCase"}
);
Exception:
`The route URL cannot start with a '/' or '~' character and it cannot contain a '?' character.`
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas inclure la chaîne de requête dans l'itinéraire. Essayez avec une route comme ceci:
Ensuite, sur votre contrôleur ajouter une méthode comme ceci:
ASP.NET MVC mapper automatiquement les paramètres de chaîne de requête pour les paramètres de la méthode dans le contrôleur.
Lors de la définition des itinéraires, vous ne pouvez pas utiliser un
/
au début de l'itinéraire:Essayez ceci:
Alors votre action doit se présenter comme suit:
On dirait que vous êtes la mise au
stepNo
et le "ABC" pour obtenir un contrôleur qui estABC1
. C'est pourquoi j'ai remplacé la section de l'URL avec{controller}
.Puisque vous avez également une route qui définit les 'key', 'groupe', la route ci-dessus sera également attirer votre URL initiale et de l'envoyer à l'action.
Il n'y a pas de raison d'utiliser le routage basé dans la chaîne de recherche dans les nouvelles ASP.NET projet MVC. Il peut être utile pour les vieux projet qui a été converti à partir classique ASP.NET projet et vous souhaitez conserver les Url.
Une solution peut être l'attribut de routage.
Une autre solution peut être dans l'écriture de routage personnalisé en dérivant de RouteBase:
Et enregistrer votre propre classe de routing
Les arguments de chaîne de requête sont généralement spécifiques de ce contrôleur et de l'application en question de la logique.
De sorte qu'il sera mieux si ce n'est pas écrit dans les règles d'acheminement, qui sont d'ordre général.
Vous pouvez intégrer la détection de chaîne de requête sur l'argument d'action de la manière suivante.
Je pense que c'est mieux d'avoir un Contrôleur pour la manipulation StepNo.
ModelBinder attribuer {id} valeur pour le champ id de l'OpenCaseArguments. La méthode set poignée querystring split logique.
Et de garder le routage de cette façon. Note de routage obtenir votre querystring en argument id.
J'ai utilisé cette méthode pour obtenir de multiples champs de valeur de la clé sur l'action du contrôleur.
QueryStringValueProvider
. Tout ce que vous devez faire pour obtenir ces valeurs dans une méthode d'action est d'ajouter des paramètres avec le même nom que la chaîne de requête clés de la méthode d'action ou d'un modèle. Il n'est pas nécessaire de construire votre propre chaîne de requête de l'analyseur pour cela.