Asp.Net в MVC 301 редирект

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

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

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

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

5 ответов


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


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

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

есть отличный учебник в контроллеры эти прохождения PluralSight.


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

пример: перенаправление запросов на ' / faq.asp ' to '/ faq':

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

при добавлении HttpModule, который полномочия UrlRewriting.Net к твоей паутине.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>

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

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


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