ASP.NET MVC路由 - “空白”路由

8

我能否设置一个路由,使其从根级URL映射到以下链接?

http://localhost:49658/

我正在使用VS2010内置的Web服务器。

尝试使用空白或单斜杠URL字符串设置路由是无效的:

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

这会导致错误:“路由URL不能以'/'或'~'字符开头,也不能包含'?'字符。”。提前感谢!我的完整路由定义如下:
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "EditingTitles", // Route name
            "{controller}/{action}/{startingLetter}", // URL with parameters
            new { controller = "Admin", action = "Index", startingLetter = UrlParameter.Optional } // Parameter defaults
        );

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
    }

展示你的其他路由,我遇到了类似上述问题(以及你对XSaint32答案的注释),我的默认路由会导致404错误,除非我指定控制器/操作,这是由于我的路由中有一个错误的命名路由。 - Jimmy
2个回答

10

你在这里想要实现什么...一个看起来像这样的URL吗?http://www.acme.com/ ? 因为如果是这样,当没有指定参数时,默认路由会实现这一点。

// Default Route:
routes.MapRoute(
   "Default", // Route name
   "{controller}/{action}/{id}", // URL with parameters
   new { controller = "Home", action = "Index", id = String.Empty } // Parameter defaults
);

你说得对,那个URL就是我想实现的。我已经有一个和你指定的完全一样的路由了……但是当我启动我的项目并访问默认的URL时,我收到一个HTTP 404("找不到资源")错误,所以似乎我必须特别处理"空URL"的情况。 - blaster
你能把那个路由粘贴到这里吗? - dotariel
听起来像是另一个指定的路由有问题,我曾经遇到过类似的问题,我的默认路由被覆盖了,无法处理根URL。请在问题中发布您所有的路由。 - Jimmy
1
我建议使用 Phil Haack 的路由调试器:http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx - dotariel
好的,我更新了问题并包含了所有我的路由。我会查看发布的路由调试器。谢谢! - blaster
由于“EditingTitles”路由首先添加到路由集合中并具有默认值,请检查是否有名为Admin的控制器和一个名为Index的操作方法。 - an phu

5
使用ASP.NET MVC5: RouteConfig.cs 文件:
 public static void RegisterRoutes(RouteCollection routes)
 {
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute(
        name: "Homepage",
        url: "",
        defaults: new { controller = "Content", action = "Index" }
    );
    routes.MapRoute(
        name: "foo",
        url: "bar",
        defaults: new { controller = "Content", action = "Index" }
    );
    routes.MapMvcAttributeRoutes();

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{title}",
        defaults: new { controller = "Content", action = "Details", title = UrlParameter.Optional }
    );
}

额外提示:
如果您希望将主页自动重定向到另一个路由,比如将 "http://www.yoursite.com/" 重定向到 "http://www.yoursite.com/bar",只需使用 RedirectToRoute() 方法:

public class ContentController : Controller
    {
        public ActionResult Index()
        {
            return RedirectToRoute("foo");
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接