2009-02-06 17 views
12

Estoy usando ASP.NET C#.Reescribiendo URL en ASP.NET?

¿Cómo implemento el procedimiento de reescritura de URL que es similar a StackOverflow.com?

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

Además, ¿cuál es el significado de valores como "358630" en la URL? ¿Es este el ID de la pregunta (la base para la cual usan para obtener los datos de la tabla)? Sea lo que sea, en mi aplicación estoy identificando registros usando un campo "ID". Este campo es una columna de identidad en una tabla SQL. En este momento, las URL de mi son como los siguientes:

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

pero me gustaría que aparezcan como:

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

O:

http://myweb.com/9872/my_question_title 

O lo que sea la mejor manera, lo cual sabrá bien para buscar bots.

Mi aplicación está alojada en el servicio de alojamiento compartido de Go Daddy, y creo que ningún "módulo HTTP" ASP.NET personalizado o ninguna DLL personalizada para la reescritura de URL está funcionando en su servidor. Probé muchas muestras, ¡pero aún no tuve suerte!

Descubrí que Stack Overflow está alojado en Go Daddy (¿alojamiento compartido?). Tal vez el método de Stack Overflow funcione para mí.

+0

No estoy seguro de por qué esto no fue votado. Parece una pregunta legítima para mí. –

+0

Sí, esta es una pregunta perfectamente legítima. – BobbyShaftoe

+0

manejando por downvoters. Sheesh. No tienen las bolas para decir POR QUÉ. – Will

Respuesta

12

SO está usando ASP.NET MVC. Realmente necesita leer en detalles cómo funciona la reescritura de URL de MVC, pero la esencia es que la parte de 'preguntas' en la URL es el nombre de la clase Controlador (que corresponde aproximadamente a 'mostrar detalles' en su URL) y el número es un parámetro de ID para la acción predeterminada en ese controlador (igual que el parámetro 'id' en su URL).

+0

Estoy usando ASP.NET 2.0 (C#) ¿Puedo usar ASP.NET MVC para desarrollar mis aplicaciones? ¿O requiero ASP.NET 3.x + para usar ASP.NET MVC? – Prashant

+0

Obtuve la respuesta, solo funcionará con las versiones ASP.NET 3.x + :( http://www.microsoft.com/downloads/details.aspx?FamilyID=f4e4ee26-4bc5-41ed-80c9-261336b2a5b6&displaylang=en# Requisitos – Prashant

+1

En realidad, debe consultar con su servicio de hosting. La mayoría de las empresas que ofrecen .Net 2.0 SP1 también suelen ofrecer .Net 3.5, ya que el CLR es el mismo y el último solo agrega más clases al marco. –

2

Antes del advenimiento de System.Web.Routing, la práctica común era usar UrlRewriter.NET. Funcionó bastante bien, pero podría morderte al configurar IIS. No estoy seguro de si hay alguna forma simple de usar las nuevas clases de enrutamiento en ASP.NET (es decir, incluirlo e ir contra el código de refactorización).

+0

Puedo Lo uso porque, UrlRewriter.NET requiere instalación en IIS, y como estoy en alojamiento compartido, entonces no tengo derecho a hacerlo: (( – Prashant

+0

Eso está muy mal ... Algunos proveedores de hosting compartido lo ofrecen como un opción, es posible que desee comprobar con ellos. – Will

3

Dado que MVC no es una opción, puede intentar redirigir los 404. Esto funcionará en ASP.NET 1.1 y superior: redirigir 404s y 405s a su propio controlador utilizando ya sea configuración de IIS o web.config, analizar la solicitud en el controlador y redirigir al recurso apropiado.

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

Hombre, esa es una forma de hackish de hacerlo .... no hay efectos secundarios de hacer esto? –

+0

Solía ​​hacer esto para sitios más pequeños en ASP clásico, egh. – Sciolist

+0

Lee los requisitos. Tiene buen sabor para los motores de búsqueda, es compatible con ASP.NET 2.0 y funciona en un hosting compartido. ¿Tiene una solución menos "hackish" que se ajusta a los requisitos? – xcud

2

explique el significado de los valores como "358630" en la URL

Eso es (presumiblemente) la identificación de la pregunta en la base de datos. En el modelo MVC

myurl.com/questions/358630 

es análoga a

myurl.com/questions.aspx?id=358630 

El título de la pregunta en el final de la URL que realmente está siendo ignorada por la aplicación. En general, está "conectado" para la optimización del motor de búsqueda y la legibilidad humana. De hecho, puede cambiar el título de esta pregunta en la URL y observar que la página aún se carga bien.

+0

Sí, pero con "ID" lo que entiendo es si Aumentaré +1 en esta http://stackoverflow.com/questions/521310/how-is-stackoverflow-com-rewriting-urls url, luego debería abrir la siguiente pregunta sin cambiar otra parte de la url. – Prashant

+0

Pero me reenvía a esta http://stackoverflow.com/questions/521298/when-to-use-struct-in-c/521311#521311 URL, ¿cómo StackOverflow lo está manteniendo? – Prashant

+0

Solo puedo especular , pero quizás estén redireccionando a una respuesta más canónica en algunos casos. Por ejemplo, cuando escribe ID 521311, redirige a 521298. Entonces puede asumir que 521298 es la mejor respuesta en estructuras en C#. –

1

El nuevo System.Web.Routing dll es parte de ASP.NET 3.5 SP1, y es bin deployable on ASP.NET 3.5, por lo que podría usar las características de eso en a classic ASP.NET WebForms site.

Es probable que desee tomar nota de los comentarios de Phil Haack en su post on using MVC on IIS 6 como usted probablemente tendrá que incluir la extensión .aspx en sus URL enrutados

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

Es posible que también desee comprobar hacia fuera Questions Tagged SEO .

El nombre de pregunta ignorado al final de la url a menudo se denomina "Slug" y se usa con fines de SEO para incluir el título de la página en la url.