Asp.Net MVC 301 Redirects - PullRequest
       7

Asp.Net MVC 301 Redirects

9 голосов
/ 11 февраля 2011

Мы использовали перезапись ISAPI (Infact все еще находится на нашем сервере), хотя она не работает с ASP.Net MVC (что-то связанное с 'euxd' get param).

Нам нужен надежный способ реализации простых перенаправлений 301, когда мы меняем структуру сайта, загружаем новый сайт и т. Д. Есть предложения?

Хорошо, я хотел перенаправить /SomeFolder/SomePage.HTML?Param1=X в / NewPage / X

Как мы можем это сделать?

Ответы [ 5 ]

37 голосов
/ 11 февраля 2011

В MVC 3 есть три новых метода перенаправления, которые могут использоваться в контроллерах для перенаправления навсегда (производят 301);в отличие от 302-х (временного перенаправления), производимых перенаправлениями MVC 2.

  • RedirectPermanent
  • RedirectToActionPermanent
  • RedirectToRoutePermanent
public ActionResult OldAction()
{
  return RedirectPermanent(urlname);
}

Существует большое руководство по Контроллеры раздел этих пошаговых руководств по PluralSight.

3 голосов
/ 14 февраля 2011

Если вы используете IIS7, я бы порекомендовал использовать официальный IIS7 модуль перезаписи URL .

2 голосов
/ 12 февраля 2011

Чтобы выполнить перенаправление со страницы не-MVC на действие контроллера MVC, лучше всего использовать библиотеку типа UrlRewriting.net или аналогичную, которая использует HttpModule для обработки каждый запрос и отправить его в определенное место.

Пример : Перенаправить запросы для '/faq.asp' на '/ faq':

<add name="faq.asp" virtualUrl="^~/faq.asp([\?#].*)?$"
            destinationUrl="~/faq"
            redirect="Application"
            redirectMode="Permanent"
            ignoreCase="true" />

Когда вы добавляете модуль HttpModule для UrlRewriting.Net в свой Web.config, убедитесь, что вы определили его до UrlRoutingModule, который автоматически определяется ASP.NET. В противном случае ASP.NET попытается обработать ваш запрос, сопоставив его с файлом или контроллером, и в результате могут возникнуть непредвиденные проблемы.

<modules runAllManagedModulesForAllRequests="true">
    <add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter"/>
    <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</modules>
1 голос
/ 27 ноября 2011

Я просто написал о простом решении, которое использует ASP.NET MVC и XML-файл для хранения сопоставлений перенаправления 301.

Однако, согласно ответу Натана Тейлора, если вам нужночтобы сделать отображение на основе Regex, я бы предложил использовать UrlRewriting.Net.

0 голосов
/ 11 февраля 2011

Реализация пользовательских ActionResult. Пример: http://www.stum.de/2008/10/22/permanentredirectresult/

...