Domanda

Esiste un modello specifico che generalmente gli sviluppatori seguono? Non ci avevo mai pensato molto prima nelle mie applicazioni web, ma il motore di routing ASP.NET MVC ti costringe a prenderlo almeno in considerazione.

Finora mi è piaciuta la struttura del controller / azione / indice (ad es. Prodotti / Modifica / 1), ma sto lottando con URL più complessi.

Ad esempio, supponiamo che tu abbia una pagina che elenca tutti i prodotti che un utente ha nel proprio account. Come lo faresti? Dalla parte superiore della mia testa posso pensare alle seguenti possibilità per una pagina di elenco e una pagina di modifica:

  1. Utente / {ID utente} / Prodotti / Elenco, Utente / {ID utente} / Prodotti / Modifica / {ID prodotto}
  2. Utente / {ID utente} / Prodotti, Utente / {ID utente} / Prodotti / {ID prodotto}
  3. Prodotti? UserID = {ID utente}, Prodotti / Modifica / {ID prodotto}

Sono sicuro che ce ne sono molti altri che mi mancano. Qualche consiglio?

È stato utile?

Soluzione

Mi piacciono gli URL RESTful, facili da usare e hackerabili.

Cosa significa? Iniziamo con URL intuitivi . Per me un URL intuitivo è qualcosa di facile da digitare e facile da ricordare /Default.aspx?action=show&userID=140 non soddisfa nessuno di questi requisiti. Un URL come `/ users / troethom & # 180; sembra logico però.

Questo porta al punto successivo. Un URL hackerabile è un URL che l'utente può modificare e ottenere comunque un risultato. Se l'URL è hackerabile e l'URL per il mio profilo è / users / troethom , sarebbe sicuro rimuovere il mio nome utente per ottenere un elenco di utenti ( / users ).

L'uso di URL RESTful è abbastanza simile alle idee alla base degli altri miei suggerimenti. Stai progettando URL per un utente e non per un computer e pertanto l'URL deve essere correlato al contenuto e non al back-end tecnico del tuo sito. Un URL come & # 180; / users & # 180; ha più senso di & # 180; / users / list & # 180; e un URL come & # 180; / categoria / programmazione / javascript & # 180; (che rappresenta la sottocategoria "javascript" nella categoria "programmazione" è meglio di & # 180; / category / show / 12 & # 180 ;.

È davvero più difficile omettere gli ID, ma nel mio mondo ne vale la pena.

Consulta anche la sezione Comprensione degli URI sull'implementazione HTTP comune del W3C & # 180; s I problemi. Ha un elenco di insidie ??comuni durante la progettazione di URI. Un'altra buona risorsa è URL di ricerca hackerabili contro risorse .

Altri suggerimenti

Potresti dare un'occhiata alla domanda " Schema URL amichevole? " ;.

In particolare, Risposta di Larry.Smithmier ha fornito un elenco di schemi URL comuni quando si utilizza MVC in ASP.NET.

Inoltre, potresti prendere in considerazione l'uso di verbi diversi per riutilizzare gli stessi percorsi per azioni diverse. Ad esempio, una richiesta GET per " Prodotti / Modifica / 45 " visualizzerebbe l'editor del prodotto, mentre un POST allo stesso URL aggiornerebbe il prodotto. È possibile utilizzare l'attributo AcceptVerb per eseguire ciò:

[AcceptVerb("GET")]
public ActionResult Edit(int id)
{
    ViewData["Product"] = _products.Get(id);
    return View();
}

[AcceptVerb("POST")]
public ActionResult Edit(int id, string title, string description)
{
    _products.Update(id, title, description);
    TempData["Message"] = "Changes saved successfully!";

    return RedirectToAction("Edit", new { id });
}

Bill de h & # 211; ra ha scritto un ottimo saggio intitolato risorsa Web criteri di mappatura per i framework che vale la pena leggere.

Per aggiungere ai commenti di troethom, RESTful generalmente significa anche che, ad esempio, per creare un nuovo utente, Mettere una rappresentazione in / users / newusername

RESTful utilizza fondamentalmente i 5 metodi HTTP standard (GET, PUT, POST, DELETE, HEAD) per controllare / accedere al contenuto.

Ok, questo non è facile per un browser web, ma puoi sempre usare un POST sovraccarico (pubblicare su / utenti / nome utente con una rappresentazione di un utente per modificare alcuni dettagli, ecc.

È un buon modo di fare le cose, consiglierei di leggere RESTFul Web services per capire meglio: D (ed è un bel libro!)

Ho visto due modi principali accettati per affrontare questo argomento ...

Uno è descritto nella MvcContrib documentazione del progetto

e l'altro è descritto in post sul blog di Stephen Walther (che preferisco personalmente).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top