Ho il seguente caso in cui voglio accettare le seguenti rotteasp.net MVC - Itinerari per stringa o int (es/tipo/23 o/tipo/cappelli)
'/type/view/23' or '/type/view/hats'
dove 23 è l'ID per i cappelli.
Il controller simile a questa:
public class TypeController
{
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult View(int id)
{
...
}
}
Ora se passano in 23 senza problemi. Se passano in cappelli, ho del lavoro da fare. Ora mi stavo chiedendo in questo caso avrei tradotto i cappelli a 23 usando un ActionFilter che cerca di vedere se il valore è passato mentre l'id è un int (se è così verifica che esista nel database) o se è una stringa sembra sul database per quale sia l'id della stringa che è stata passata. In entrambi i casi, se non viene trovata una corrispondenza, vorrei reindirizzare l'utente a un'azione diversa.
In primo luogo è l'approccio che ho chiamato corretto, in secondo luogo è possibile eseguire un reindirizzamento all'interno di un filtro di azione.
Acclamazioni Anthony
Pensando di trovare un modo per il quadro per fare il lavoro, potrei avere due rotte come la seguente: this._Routes.MapRoute ("TypeInt" , "type/view/{id}", new {controller = "Type", action = "ViewInt"}, new {page = @ "^ \ d + $"}); this._Routes.MapRoute ("TypeString", "type/view/{id}", new {controller = "Type", action = "ViewString"}); Ne varrebbe la pena farlo? o pensi solo di provare? –
Non vedo ciò che guadagni aggiungendo complicazioni all'infrastruttura di routing, tranne che fa il parsing per te. Non sono abbastanza intelligente per sapere se funzionerebbe senza testarlo veramente.Personalmente, probabilmente avrei due diverse azioni View e ViewByName, che usano entrambi lo stesso metodo privato per generare i dati una volta trovato il prodotto corretto. Per me sarebbe ancora più semplice e chiaro. – tvanfosson