ASP.Net MVC: Alors attendez… Le paramètre de route par défaut doit être nommé id?

StackOverflow https://stackoverflow.com/questions/1004331

  •  05-07-2019
  •  | 
  •  

Question

Quelqu'un at-il eu ce problème? Je dois faire quelque chose de mal.

Je configure donc un itinéraire pour des erreurs comme celle-ci:

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{error}",
 new { error = "" }
);

Et en appelant comme:

return parentController.RedirectToRoute("SharedError", new RouteValueDictionary(new { error = errorMessage.ToString() }));

Et sur le contrôleur:

public ActionResult Error(String error)

Simple non? Eh bien, lorsque cela est réellement exécuté, l'erreur est nulle même si l'URL ressemble à ceci:

/ Shared / Error / ThisIsTheError

Mais le paramètre error de la méthode Error est null. (Et oui j'ai essayé d'autres mots)

Maintenant, si je remplace tout cela par le mot "id", tout fonctionne.

Global.asax.cs

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{id}",
 new { id = "" }
);

Rediriger:

return parentController.RedirectToRoute("SharedError", new RouteValueDictionary(new { id = errorMessage.ToString() }));

Contrôleur partagé:

public ActionResult Error(String id)

Est-ce que id est un mot indispensable pour toutes les routes si une route par défaut prend une valeur?

Était-ce utile?

La solution

Vous devez toujours spécifier les paramètres du contrôleur et de l'action:

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{error}",
 new { controller = "Shared", action="Error", error = "" }
);

J'imagine que l'utilisation de l'id fonctionne pour vous parce que la route par défaut est toujours enregistrée, avec id pour paramètre et les valeurs par défaut pour le contrôleur et l'action.

Notez que si vous avez toujours la route par défaut, assurez-vous de l'ajouter avant , sinon elle correspondra à l'autre en premier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top