Asp.net 重定向区域';将默认操作添加到单个url

Asp.net 重定向区域';将默认操作添加到单个url,asp.net,asp.net-mvc,routing,asp.net-mvc-areas,Asp.net,Asp.net Mvc,Routing,Asp.net Mvc Areas,好吧,我应该知道……但是……我伸出手来是因为我的头撞到了墙上 有一个MVC区域,我们称之为“商店”。有一个控制器,我们叫它“家”。有一个动作,我们称之为“索引”。以下URL将显示同一页面: /存储/主页/索引 /商店/家庭/ 出于搜索引擎优化的目的,我想限制它“/store/home/”。如何做到这一点?如果您已经使用此URL发布了您的网站,正确的方法是使用301重定向。这是确保任何指向/store/home/index路线的链接不会立即变成死链接,从而停止计算SEO分数的唯一方法。这可以使用

好吧,我应该知道……但是……我伸出手来是因为我的头撞到了墙上

有一个MVC区域,我们称之为“商店”。有一个控制器,我们叫它“家”。有一个动作,我们称之为“索引”。以下URL将显示同一页面:

/存储/主页/索引

/商店/家庭/


出于搜索引擎优化的目的,我想限制它“/store/home/”。如何做到这一点?

如果您已经使用此URL发布了您的网站,正确的方法是使用301重定向。这是确保任何指向
/store/home/index
路线的链接不会立即变成死链接,从而停止计算SEO分数的唯一方法。这可以使用

或者,您也可以在页面中添加一个指向
/store/home/
URL的链接

但是,如果您尚未发布该网站,则可以添加直接指向自定义404页面的路由

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "Store_Non_Match",
        "store/home/index",
        new { controller = "System", action = "Status404"}
    ).DataTokens["area"] = "";

    context.MapRoute(
        "Store_default",
        "store/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional }
    );
}
然后在您的站点中,制作一个系统控制器以返回404页面和状态

public class SystemController : Controller
{
    //
    // GET: /System/Status301/?url=(some url)

    public ActionResult Status301(string url)
    {
        Response.CacheControl = "no-cache";
        Response.StatusCode = (int)HttpStatusCode.MovedPermanently;
        Response.RedirectLocation = url;

        ViewBag.DestinationUrl = url;
        return View();
    }

    //
    // GET: /not-found

    public ActionResult Status404()
    {
        Response.CacheControl = "no-cache";
        Response.StatusCode = (int)HttpStatusCode.NotFound;

        return View();
    }
}
注意:上面的控制器还演示了如何在应用程序中使用301重定向作为IIS重写模块的替代方案。如果您有URL,您知道随着时间的推移您将退出,并且您希望通过应用程序中的一个操作自动执行此操作,那么这将非常方便。并非所有浏览器都遵守301重定向,因此我的解决方案是返回一个视图,该视图在5秒钟后尝试执行JavaScript和元刷新重定向,如果所有其他操作都失败,它将有一个指向用户可以单击的页面的超链接

// Status301.cshtml
@{
    ViewBag.Title = "Page Moved";
}
@section MetaRefresh {
    <meta http-equiv="refresh" content="5;@ViewBag.DestinationUrl" />
}

<h2 class="error">Page Moved</h2>

This page has moved. Click this link if you are not redirected in 5 seconds: <a href="@ViewBag.DestinationUrl">@ViewBag.DestinationUrl</a>.

<script>
    //<!--
    setTimeout(function () {
        window.location = "@ViewBag.DestinationUrl";
    }, 5000);
    //-->
</script>
//Status301.cshtml
@{
ViewBag.Title=“页面已移动”;
}
@节元刷新{
}
页面移动
此页面已移动。如果在5秒内未重定向,请单击此链接:。
//
您试过这个吗?