默认属性路由无法正常工作

时间:2016-02-04 15:33:29

标签: asp.net asp.net-mvc asp.net-web-api attributerouting

我正在开发一个新项目,我决定单独使用属性路由。这是我的RouteConfig文件:

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapMvcAttributeRoutes();

        //routes.MapRoute(
        //    name: "Default",
        //    url: "{controller}/{action}",
        //    defaults: new { controller = "HomeController", action = "Index", id = UrlParameter.Optional }
        //);
    }

这是我的控制者:

[RoutePrefix("home")]
public class HomeController : Controller
{
    [Route]
    [Route("~/")]
    public ActionResult Index()
    {
        var status = HttpContext.User.Identity.IsAuthenticated;
        ViewBag.Title = "Home Page";

        return View();
    }

    [Route("test")]
    public ActionResult Test()
    {

        return View();
    }
}

我已经意识到通常我的所有属性都在工作,但我希望Index方法在应用程序启动时运行。说https://example.com然后触发Index方法就像我输入了网址https://example.com/home/index一样。当我说https://example.com时,我得到一个空白。

任何人都可以帮助我理解为什么我会得到一个空白区域,以及如何使用属性路由设置默认的应用程序启动路径?我一直在网上冲浪几个小时,但我不能把手放在任何东西上。

2 个答案:

答案 0 :(得分:2)

在您的情况下,您仍应设置默认路线。这样,网站就知道从哪里开始。从那里开始,其他一切都应该如你所愿。

public static void RegisterRoutes(RouteCollection routes) {
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapMvcAttributeRoutes();

    routes.MapRoute(
        name: "Default",
        url: "{action}",
        defaults: new { controller = "Home", action = "Index" }
    );
}

这是我的家庭控制器。

public class HomeController : FrontOfficeControllerBase {
    public HomeController() {
    }

    public ActionResult Index() {
        ...
        return View();
    }
}

除此之外,这使我的路由配置保持干净,因为我在其他地方使用属性路由。

答案 1 :(得分:1)

试试这个:

[RoutePrefix("home")]
public class HomeController : Controller 
{
    [Route("index")]
    [Route("~/", Name = "default")]
    public ActionResult Index()
    {
        ...
    }

    ...
}