Asp.net mvc 5 mvc5基于属性的路由不工作

Asp.net mvc 5 mvc5基于属性的路由不工作,asp.net-mvc-5,Asp.net Mvc 5,我正在使用visual studio 2013并创建了一个默认的mvc项目 [RoutePrefix("home")] [Route("{action=index}")] public class HomeController : Controller { public ActionResult Index() { return View(); } //[Route("Home/

我正在使用visual studio 2013并创建了一个默认的mvc项目

 [RoutePrefix("home")]
    [Route("{action=index}")]
    public class HomeController : Controller
    {

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

        //[Route("Home/About")]
        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }
    }
在RouteConfig.cs中,我做了以下修改

public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapMvcAttributeRoutes();
            //routes.MapRoute(
            //    name: "Default",
            //    url: "{controller}/{action}/{id}",
            //    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            //);
        }
    }

这不起作用。但当我选择基于约定的路由时,它就起作用了。请帮助我。

要使web api创建WebApiConfig.cs:

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();
        }
    }
}
在您的global.asax中:

GlobalConfiguration.Configure(WebApiConfig.Register);
然后您可以定义控制器:

[RoutePrefix("home")]
    public class HomeController : ApiController
    {
        [Route("action")]
        public string myaction()
        {
            return "hello world";
        }
    }
这样,route/home/action将发回定义的字符串 现在WebApi和MVC之间的最大区别在于,您不使用服务器端来模板和提供视图,它主要用于REST操作:GET PUT POST DELETE 我不知道你想要实现什么,但我希望这将是有用的

编辑: 我在想,也许你忘了在global.asax中注册MVC路线,应该会有类似的呼叫:

GlobalConfiguration.Configure(RegisterRoutes.routes);
诸如此类 在代码中尝试更改:

[RoutePrefix("Home")]
    public class HomeController : Controller
    {
        [Route("Index")]
        public ActionResult Index()
        {
            return View();
        }

        [Route("About")]
        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }
    }

路由应该是/Home/Index和/Home/About

你也可以这样做,但是使用WebApi,如果你愿意的话,我可以提供示例。但是为什么不起作用呢?我真的不知道,因为我只是尝试了MVC的基本方法,不知道你可以在MVC中用属性映射路由,但是我使用了WebApi,它很容易工作