【问题标题】:How do I redirect WebForms URLs to their MVC equivalents in an ASP.NET MVC 4 solution?如何在 ASP.NET MVC 4 解决方案中将 WebForms URL 重定向到它们的 MVC 等效项?
【发布时间】:2013-02-27 16:21:17
【问题描述】:

我发现这个问题有很多不同的变体,但似乎没有什么是我想要尝试的,所以如果已经回答,请原谅。

我有一个已完成转换为 MVC 4 (C#) 的旧 WebForms 解决方案。我在不同的解决方案中有两个项目。我想完全删除旧的 WebForms 项目、解决方案和已部署的文件,并在其位置重新部署新的 MVC 4 站点。既然如此,我不想杀死所有的旧 URL。例如,在 WebForms 站点中,您可以访问:

http://mysite.com/Customers.aspx

在 MVC 4 中,该 URL 现在是:

http://mysite.com/Customers

我想设置一个路由或重定向规则来处理这样的场景。我什至可以手动添加许多规则,因为该站点实际上并没有那么大。我觉得这应该很简单,但我对这个领域真的很陌生,似乎不太清楚我应该在哪里添加或添加什么。

【问题讨论】:

    标签: asp.net-mvc redirect asp.net-mvc-4 webforms


    【解决方案1】:

    尝试使用这样的自定义过滤器:(此代码尚未在您的场景中进行测试,但我使用了已测试的基本重定向到 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
    {
    
    }
    

    希望这至少可以为您指明正确的方向。

    【讨论】:

    • 请原谅我对这里的不熟悉,但我应该把那个文件放在哪里?
    • 您可以在项目命名空间中的任何位置创建此类,然后您可以简单地引用它 - [Namespace.This.That.RedirectASPX]。不过,就个人而言,我会为这些过滤器创建一个自定义位置(因为我使用了几个,但您可能看不到需要)。
    • 回答了我自己的问题。这是一篇关于动作过滤器的好文章的链接,供将来像我一样不熟悉的人使用:asp.net/mvc/tutorials/hands-on-labs/…
    • 这些功能绝对强大,尤其是当您使用属性进行企业级编码时:)
    • 这似乎根本不起作用,因为当我尝试转到 mysite.com/Customers.aspx 时甚至没有命中代码。如果我去mysite.com/Customers,它是,但没有用。
    【解决方案2】:

    感谢@brenton 为我指出了正确的方向,我终于弄明白了。对于在我之后执行此操作的任何人的全套步骤。

    在您的 IIS 实例中安装 URL 重写模块:

    http://www.iis.net/learn/extensions/url-rewrite-module/using-the-url-rewrite-module

    Visual Studio 的 Intellisense 不知道重写模块,因此请按照此处的说明添加它(不是必需的):

    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>
    

    【讨论】:

      猜你喜欢
      • 2011-01-27
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      相关资源
      最近更新 更多