Переписывать URL в ASP.NET? - PullRequest
       14

Переписывать URL в ASP.NET?

12 голосов
/ 06 февраля 2009

Я использую ASP.NET C #.

Как реализовать процедуру перезаписи URL, аналогичную StackOverflow.com?

/380084/kak-iskat-datu-v-sql

Кроме того, каково значение таких значений, как "358630" в URL? Является ли это идентификатором вопроса (основа, по которой они выбирают данные из таблицы)? Как бы то ни было, в моем приложении я идентифицирую записи, используя поле «ID». Это поле является столбцом идентификаторов в таблице SQL. Прямо сейчас мои URL выглядят следующим образом:

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

Но я бы хотел, чтобы они выглядели так:

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

Или:

http://myweb.com/9872/my_question_title

Или каким-либо лучшим способом, который будет приятен на вкус поисковым роботам.

Мое приложение размещено на сервисе общего хостинга Go Daddy , и я чувствую, что на их сервере не работает ни настраиваемый "HTTP-модуль" ASP.NET, ни настраиваемая DLL для перезаписи URL. Я пробовал много образцов, но пока не повезло!

Я обнаружил, что Stack Overflow размещается на Go Daddy (общий хостинг?). Возможно, метод Stack Overflow подойдет мне.

Ответы [ 5 ]

12 голосов
/ 06 февраля 2009

SO использует ASP.NET MVC . Вы действительно должны прочитать подробно, как работает перезапись URL MVC, но суть в том, что часть 'questions' в URL - это имя класса Controller (что примерно соответствует 'showdetails' в вашем URL) и число - это параметр ID для действия по умолчанию на этом контроллере (аналогично параметру 'id' в вашем URL).

3 голосов
/ 06 февраля 2009

Поскольку MVC не вариант, вы можете попробовать перенаправить 404-ые. Это будет работать в ASP.NET 1.1 и выше: перенаправить 404 и 405-й в свой собственный обработчик, используя IIS config или web.config, проанализировать запрос в обработчике и перенаправить на соответствующий ресурс. *

<configuration>
   <system.web>
    <customErrors mode="On" defaultRedirect="error.html">
        <error statusCode="404" redirect="newHandler.aspx"/>
    </customErrors>       
   </system.web>
</configuration>
2 голосов
/ 06 февраля 2009

объясните, пожалуйста, значение ценностей например, "358630" в URL

Это (предположительно) идентификатор вопроса в базе данных. В модели MVC

 myurl.com/questions/358630

аналогично

myurl.com/questions.aspx?id=358630

Заголовок вопроса в конце URL фактически игнорируется приложением. Как правило, он «привязан» к поисковой оптимизации и удобочитаемости. Фактически, вы можете изменить заголовок этого вопроса в URL и заметить, что страница по-прежнему загружается просто отлично.

2 голосов
/ 06 февраля 2009

До появления System.Web.Routing обычной практикой было использование UrlRewriter.NET . Работал достаточно хорошо, но мог укусить вас при настройке IIS. Я не уверен, есть ли какие-либо простые способы использования новых классов маршрутизации в ASP.NET (т.е. добавьте их и используйте вместо рефакторинга).

1 голос
/ 07 февраля 2009

Новый dll System.Web.Routing является частью ASP.NET 3.5 с пакетом обновления 1 (SP1) и bin, развертываемый в ASP.NET 3.5 , так что вы можете использовать его возможности на классическом Сайт ASP.NET WebForms .

Вы, вероятно, захотите принять к сведению комментарии Фила Хаака в его посте об использовании MVC в IIS 6 , поскольку вам, вероятно, потребуется включить расширение .aspx в перенаправленные URL-адреса

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

Вы также можете проверить Вопросы с меткой SEO .

Имя игнорируемого вопроса в конце URL-адреса часто называют «Slug» и используется в целях SEO для включения заголовка страницы в URL-адрес.

...