Domanda

Sto cercando alcune informazioni sul routing in MVC con C #. Sono attualmente molto consapevole delle basi del routing in MVC, ma quello che sto cercando è piuttosto difficile da trovare.

In effetti, quello che voglio trovare è un modo per definire un singolo percorso che accetta un singolo parametro.

Gli esempi comuni che ho trovato online si basano tutti sull'esempio

routes.MapRoute(
    "Default",
    "{controller}.mvc/{action}/{id}"
    new { controller = "Default", action="Index", id=""});

Mappando questa route, è possibile mappare qualsiasi azione in qualsiasi controller, ma se si desidera passare qualcosa nell'azione, il parametro del metodo deve essere chiamato " id " ;. Voglio trovare un modo per aggirare questo, se possibile, in modo da non dover costantemente specificare percorsi solo per usare un nome di parametro diverso nelle mie azioni.

Qualcuno ha qualche idea o ha trovato un modo per aggirare questo?

È stato utile?

Soluzione

Puoi costruire i percorsi come preferisci

routes.MapRoute(
    "Default",
    "{controller}.mvc/{action}/{param1}/{param2}/{param3}"
    new { controller = "Default", action="Index", param1="", param2="", param3=""});

Inoltre, guarda questo post , contiene tutti i tipi di campioni nella sezione commenti

Altri suggerimenti

Se si desidera avere un nome di parametro diverso e mantenere la stessa variabile di routing, utilizzare l'attributo FromUri in questo modo:

public ActionResult MyView([FromUri(Name = "id")] string parameterThatMapsToId)
{
   // do stuff
}

Nei tuoi percorsi, tutto ciò che serve è:

routes.MapRoute(
  "Default",
  "{controller}.mvc/{action}/{id}"
  new { controller = "Default", action="Index", id=""});

Non penso che tu possa fare esattamente quello che stai chiedendo. Quando MVC invoca un'azione, cerca i parametri nelle route, richiede i parametri e la stringa di query. Cerca sempre di abbinare il nome del parametro.

Forse una buona vecchia stringa di query soddisferà le tue esigenze.

~/mycontroller/myaction/?foobar=123

passerà 123 a questa azione:

public ActionResult MyAction(int? foobar)

So che è successo secoli fa, ma spero che aiuti ancora qualcuno. Ho fatto la stessa domanda prima. Penso che questo sia quello che stai cercando. Una risposta citata dal mio post di domanda: " Il bit {* pathInfo} è chiamato slug. è fondamentalmente un carattere jolly che dice " tutto ciò che segue questo punto è inserito in un parametro chiamato pathInfo " ;. Quindi se hai & Quot; {resource} .axd / {* pathInfo} & Quot; e un url come questo: http://blah/foo.axd/foo/bar/baz/bing quindi vengono creati due parametri, uno chiamato risorsa, che conterrà foo e uno chiamato pathInfo che contiene foo / bar / baz / bing. "

Sebbene non sia ancora possibile utilizzare l'attributo FromUri, è comunque possibile utilizzare l'attributo Route, in questo modo

[Route("~/Policy/PriorAddressDelete/{sequence}")]
public ActionResult PriorAddressDelete(int sequence)
{
  Policy.RemoveScheduledPriorAddressItem(sequence);
  return RedirectToAction("Information", new { id = Policy.Id });
}

Tecnicamente questo aggiunge un nuovo percorso, ma almeno non ingombra il tuo routeconfig. Mette la definizione del percorso proprio dove viene utilizzata, che mi piace (meno caccia alle cose verso il basso).

Ricorda, per utilizzare il routing degli attributi, questo deve essere nel tuo file routeconfig sopra i tuoi percorsi definiti:

routes.MapMvcAttributeRoutes();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top