2009-02-06 13 views
12

Sto usando ASP.NET C#.Riscrivendo gli URL in ASP.NET?

Come implementare la procedura di riscrittura degli URL simile a StackOverflow.com?

http://stackoverflow.com/questions/358630/how-to-search-date-in-sql 

Inoltre, qual è il significato di valori come "358630" nell'URL? È questo l'ID della domanda (la base per la quale si usano per recuperare i dati dalla tabella)? Qualunque cosa sia, nella mia domanda sto identificando i record usando un campo "ID". Questo campo è una colonna Identity in una tabella SQL. In questo momento, i miei URL sono come la seguente:

http://myweb.com/showdetails.aspx?id=9872 

ma mi piacerebbe loro di apparire come:

http://myweb.com/showdetails/9872/my_question_title 

Oppure:

http://myweb.com/9872/my_question_title 

o qualunque sia il modo migliore, che avrà un buon sapore per cercare i bot.

La mia applicazione è ospitata nel servizio di hosting condiviso Go Daddy e ritengo che nessun "modulo HTTP" ASP.NET personalizzato o nessuna DLL personalizzata per la riscrittura dell'URL stia funzionando sul loro server. Ho provato molti campioni ma ancora senza fortuna!

Ho trovato che Stack Overflow è ospitato su Go Daddy (hosting condiviso?). Forse il metodo di Stack Overflow funzionerà per me.

+0

Non so perché questo è stato rifiutato. Mi sembra una domanda legittima. –

+0

Sì, questa è una domanda perfettamente legittima. – BobbyShaftoe

+0

unità da downvoters. Sheesh. Non hanno le palle per dire PERCHE '. – Will

risposta

12

SO sta utilizzando ASP.NET MVC. Hai davvero bisogno di leggere in dettaglio come funziona la riscrittura degli URL MVC, ma il succo è che la parte 'domande' nell'URL è il nome della classe Controller (che corrisponde approssimativamente al 'showdetails' nel tuo URL) e il number è un parametro ID per l'azione predefinita su quel Controller (uguale al parametro 'id' nel tuo URL).

+0

Sto usando ASP.NET 2.0 (C#) posso utilizzare ASP.NET MVC per sviluppare le mie applicazioni? O ho bisogno di ASP.NET 3.x + per utilizzare ASP.NET MVC? – Prashant

+0

Ottenuta la risposta, funzionerà solo con le versioni di ASP.NET 3.x + :( http://www.microsoft.com/downloads/details.aspx?FamilyID=f4e4ee26-4bc5-41ed-80c9-261336b2a5b6&displaylang=en# Requisiti – Prashant

+1

In realtà, dovresti verificare con il tuo servizio di hosting.La maggior parte delle aziende che offrono .Net 2.0 SP1 di solito offrono anche .Net 3.5, vedendo come il CLR è lo stesso e quest'ultimo aggiunge solo più classi al framework –

2

Prima dell'avvento di System.Web.Routing, la pratica comune era utilizzare UrlRewriter.NET. Ha funzionato abbastanza bene, ma potrebbe morderti durante la configurazione di IIS. Non sono sicuro se ci sono modi semplici per utilizzare le nuove classi di routing in ASP.NET (ad esempio, rilasciarlo e andare contro il codice di refactoring).

+0

Posso Usiamo questo perché, UrlRewriter.NET richiede l'installazione in IIS, e come sono su hosting condiviso, quindi non ho il diritto di farlo: (( – Prashant

+0

Questo è un peccato ... Alcuni provider di hosting condiviso lo offrono come – Will

3

Poiché MVC non è un'opzione, è possibile provare a reindirizzare gli 404. Funzionerà in ASP.NET 1.1 e versioni successive: reindirizza 404 e 405 al tuo gestore utilizzando IIS config o web.config, analizza la richiesta nel gestore e reindirizza alla risorsa appropriata.

<configuration> 
    <system.web> 
    <customErrors mode="On" defaultRedirect="error.html"> 
     <error statusCode="404" redirect="newHandler.aspx"/> 
    </customErrors>  
    </system.web> 
</configuration>
+0

Uomo, questo è un modo hacker di farlo ... non ci sono effetti collaterali da questo? –

+0

Utilizzato per fare questo per siti più piccoli in ASP classico, egh. – Sciolist

+0

Leggi i requisiti. Ha un buon sapore per i motori di ricerca, supportato da ASP.NET 2.0 e funziona su un hosting condiviso. Hai una soluzione "meno hacker" che si adatta alle richieste? – xcud

2

si prega di spiegare il significato dei valori come "358630" nell'URL

Questo è (presumibilmente) l'ID per la domanda nel database. Nel modello MVC

myurl.com/questions/358630 

è analogo a

myurl.com/questions.aspx?id=358630 

Il titolo interrogativo sulla fine dell'URL viene effettivamente ignorato dalla app. In genere è "attaccato" per l'ottimizzazione dei motori di ricerca e per la leggibilità umana. In effetti, puoi modificare il titolo di questa domanda nell'URL e notare che la pagina si carica ancora bene.

+0

Sì, ma con "ID" quello che capisco è se Aumenterò +1 in questo http://stackoverflow.com/questions/521310/how-is-stackoverflow-com-re-writing-urls url, quindi dovrebbe aprire la domanda successiva senza modificare l'altra parte dell'URL. – Prashant

+0

Ma mi sta inoltrando a questo http://stackoverflow.com/questions/521298/when-to-use-struct-in-c/521311#521311 URL, come StackOverflow sta mantenendo questo ??? – Prashant

+0

Posso solo speculare , ma forse stanno reindirizzando verso una risposta più canonica in alcuni casi, quindi per esempio, quando si digita l'ID 521311, si reindirizza a 521298. Quindi si può supporre che 521298 sia la migliore risposta sulle strutture in C#. –

1

La nuova dll System.Web.Routing fa parte di ASP.NET 3.5 SP1 ed è bin deployable on ASP.NET 3.5, quindi è possibile utilizzare le funzionalità di questo su a classic ASP.NET WebForms site.

Probabilmente si vorrà prendere atto delle osservazioni del Phil Haack nel suo post on using MVC on IIS 6 come avrete probabilmente bisogno di includere l'estensione aspx negli URL instradati

http://www.mysite.com/controler.aspx/action/id 

Si potrebbe anche voler controllare Questions Tagged SEO .

Il nome della domanda ignorata alla fine dell'url viene spesso chiamato "slug" e viene utilizzato per scopi SEO per includere il titolo della pagina nell'URL.