【问题标题】:Single Url for an Controller Action method控制器操作方法的单个 URL
【发布时间】:2012-01-13 17:01:03
【问题描述】:

为什么在 ASP.NET MVC 中有这么多选择操作方法的方法以及如何避免这种情况?我的意思是,我可以从 /、/Home、/Home/Index 转到 Index 操作方法。我认为这会影响SEO排名。

【问题讨论】:

  • 这只是按照惯例,开箱即用。通过创建自定义路由,您可以完全控制 URL 架构。

标签: asp.net asp.net-mvc asp.net-mvc-3 seo


【解决方案1】:

这是由于 Global.asax.cs 中的默认路由设置:

routes.MapRoute(
            "Default",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

这会为控制器和操作配置一个具有默认值的路由。因此:

  • /Home/Index 会将此路由与明确定义的控制器和操作值匹配
  • /Home 将匹配 Default 路由,并且路由配置将提供“Home”的默认控制器
  • / 将匹配 Default 路由,并且路由配置将提供默认控制器和操作

您可以通过将controller = "Home", action = "Index" 从第三个参数中删除到MapRoute 来更改此设置。这将删除默认值并要求 URL 明确指定控制器和操作。

您可能需要第二次调用 MapRoute 来明确指定主页路由:

// route the root URL to the home page controller/action
routes.MapRoute("HomePage", "", new { controller = "Home", action = "Index" });

否则对http://yourdomain.com 的请求将不会路由到任何控制器/操作对,您将获得 404 而不是主页。

【讨论】:

  • 谢谢,但这并不能解决问题。我找到了这篇文章并检查它是否能解决我的问题,goo.gl/uQ07C
【解决方案2】:

引用this网站的回答,

public class RemoveDuplicateContentAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var routes = RouteTable.Routes;
        var requestContext = filterContext.RequestContext;
        var routeData =requestContext.RouteData;
        var dataTokens = routeData.DataTokens;
        if (dataTokens["area"] == null)
            dataTokens.Add("area", "");
        var vpd = routes.GetVirtualPathForArea(requestContext, routeData.Values);
        if (vpd != null)
        {
            var virtualPath = vpd.VirtualPath.ToLower();
            var request = requestContext.HttpContext.Request;
            if (!string.Equals(virtualPath, request.Path))
            {
                filterContext.Result = new RedirectResult(virtualPath + request.Url.Query, true);
            }
        }
        base.OnActionExecuting(filterContext);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多