3

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

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

http://mysite.com/Customers.aspx

在 MVC 4 中,该 URL 现在是:

http://mysite.com/Customers

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

4

2 回答 2

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
{

}

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

于 2013-02-27T16:40:54.380 回答
0

感谢@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

之后,将以下块添加到文件的<system.WebServer>部分Web.config

<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>
于 2013-02-28T16:14:28.447 回答