2013-02-27 51 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>