2013-02-27 55 views
3

我發現了這個問題的許多不同的變體,但沒有什麼似乎正是我試圖嘗試,所以請原諒,如果它已經被回答。如何在ASP.NET MVC 4解決方案中將WebForms URL重定向到其MVC等效項?

我有一箇舊的WebForms解決方案,我已經完成轉換爲MVC 4(C#)。我有兩個項目在不同的解決方案。我想徹底刪除舊的WebForms項目,解決方案和部署的文件,並重新部署新的MVC 4站點。既然如此,我不想殺掉所有的舊網址。例如,在WebForms的網站,你可以去:

http://mysite.com/Customers.aspx

在MVC 4

,即URL現在是:

http://mysite.com/Customers

我想建立一個路由或重定向規則處理這種情況。我甚至可以手動添加許多規則,因爲該網站確實不是那麼大。我覺得這應該是非常簡單的,但我對這個領域真的很陌生,並且似乎無法弄清楚我應該添加哪裏或哪些內容。

回答

0

嘗試使用像這樣的自定義過濾器:(此代碼尚未與您的方案進行測試,但我用我的基地重定向到已測試SSL)...

using System.Web.Mvc; 
namespace Libraries.Web.Attributes 
{ 
    public class RedirectASPXAttribute : FilterAttribute, IAuthorizationFilter 
    { 
     public void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      var request = filterContext.HttpContext.Request; 
      if (request.Url != null && request.Contains(".aspx")) 
      { 
       var manipulatedRawUrl = request.RawUrl.Remove(request.RawUrl.LastIndexOf(".aspx"), 5); 
       filterContext.Result = new RedirectResult("http://" + request.Url.Host + manipulatedRawUrl); 
      } 
     } 
    } 
} 

然後,你只需用屬性裝飾控制器:

[RedirectASPX] 
public class HomeController : Controller 
{ 

} 

希望這至少能指引你朝正確的方向發展。

+0

請原諒我在這裏不熟悉,但我究竟在哪裏放這個文件? – Morinar 2013-02-27 16:50:21

+0

你可以在你的項目命名空間的任何地方創建這個類,然後你可以簡單地引用它 - [Namespace.This.That.RedirectASPX]。就個人而言,我會爲這些過濾器創建一個自定義位置,但(因爲我有幾個我使用,但你可能看不到需要)。 – brenton 2013-02-27 16:52:55

+0

回答了我自己的問題。這裏有一個關於Action Filter的好文章的鏈接,用於任何與我不熟悉的未來人士:http://www.asp.net/mvc/tutorials/hands-on-labs/aspnet-mvc-4-custom-動作過濾器 – Morinar 2013-02-27 16:53:08

0

我終於明白了這一點,這要感謝@ brenton指引我朝着正確的方向發展。任何人在我身後都可以完成一整套步驟。

在這裏找到你的IIS實例(一個或多個)安裝URL重寫模塊:

Visual Studio的智能感知不會知道重寫模塊,以便按照說明此處添加它(不是必需的):

https://stackoverflow.com/a/8624558/45077

之後,添加以下塊到您Web.config文件的<system.WebServer>部分:

<rewrite> 
<rules> 
    <rule name="Redirect ASPX File to MVC" stopProcessing="true"> 
     <match url="(.*)\.aspx" /> 
     <action type="Redirect" url="{R:1}" appendQueryString="false" /> 
    </rule> 
</rules> 
</rewrite>