ASP.NET MVC 4 - 301在RouteConfig.cs中重定向

nii*_*ico 33 asp.net-mvc asp.net-mvc-routing asp.net-mvc-4

如何在ASP.NET MVC 4应用程序中添加路由到RouteConfig.cs文件以执行永久301重定向到另一个路由?

我想某些不同的路线指向相同的控制器动作 - 似乎301是最佳实践,特别是对于SEO?

谢谢.

Bas*_*imo 50

你必须使用RedirectPermanent,这是一个例子:

public class RedirectController : Controller
{

    public ActionResult News()
    {

        // your code

        return RedirectPermanent("/News");
    }
}
Run Code Online (Sandbox Code Playgroud)

在全球的asax中:

    routes.MapRoute(
        name: "News old route",
        url: "web/news/Default.aspx",
        defaults: new { controller = "Redirect", action = "News" }
    );
Run Code Online (Sandbox Code Playgroud)

  • 是的,我建议添加一个包含所有重定向的新控制器.如果将它们添加到MapRoutes中,您将在浏览器中显示旧URL并使用正确的视图(这不是重定向) (2认同)

Jon*_*ski 25

我知道你在RouteConfig上特别询问了如何做到这一点,但你也可以使用IIS重写规则来完成相同的工作.这些规则存在于您的web.config中,因此您甚至不需要使用IIS来创建规则,您只需将它们添加到web.config中,并随应用程序一起移动到所有环境中(Dev,Staging,Prod,等)并保持您的RouteConfig干净.它确实需要在IIS 7上安装IIS模块,但我相信它预先安装在7.5+上.

这是一个例子:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Redirect t and c" stopProcessing="true">
                    <match url="^terms_conditions$" />
                    <action type="Redirect" url="/TermsAndConditions" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

  • 很棒的答案!我建议在`action`标签的末尾添加`redirectType ="Permanent"`,以明确它是301重定向. (8认同)