为什么有这么多方法可以在ASP.NET MVC中选择一个动作方法,以及我如何避免这种情况?我的意思是,我可以从/,/ Home,/ Home / Index转到Index动作方法。我认为这会影响SEO排名。
答案 0 :(得分:5)
这是由于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而不是主页。
答案 1 :(得分:-1)
从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);
}
}