MVC中的属性路由

时间:2016-09-06 10:29:50

标签: asp.net-mvc asp.net-mvc-5 routing asp.net-mvc-routing

任何人都可以向我解释属性路由。我对此有疑问。

当我使用"只有"属性路由我遇到错误。

  1. 当网址为" http://localhost:51254/":
  2.   

    HTTP错误403.14 - 禁止将Web服务器配置为不列出   这个目录的内容。

    1. 当网址为" http://localhost:51254/MyHome/HomeAction"
    2.   

      HTTP错误404.0 - 未找到您正在寻找的资源   删除,更改名称或暂时不可用。

      我在控制器中的代码:

          [RoutePrefix("MyHome/{action}")]
          public class IndexController : Controller
          {
              [Route("HomeAction")]
              public ActionResult Index()
              {
                  return View();
              }
      
              [Route("CallUs")]
              public ViewResult ContactUs()
              {
                  return View();
              }
          }
      

      RouteConfig.cs看起来像:

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

      网址有什么问题吗?
      我尝试过不同的方式: http://localhost:51254/Index

      http://localhost:51254/Index/Index

      http://localhost:51254/HomeAction

      http://localhost:51254/MyHome

      http://localhost:51254/MyHome/HomeAction

      所以,如果我重新提出问题那么它就像是:
      是否必须使用基于约定的路由和objRouteCollection.mapRoute方法? 因为如果我添加MapRoute方法,它的效果非常好。

      我搜索过但无法找到能回答我问题的内容。例如msdnc-SharpCorner

1 个答案:

答案 0 :(得分:2)

当使用Route属性修饰操作方法时,无法再从RouteConfig.cs中定义的基于约定的路径访问该方法

MVC期望RoutePrefix中的文字字符串,否则会产生运行时错误。实际错误:"操作方法的直接路由不能使用参数' action'。指定文字路径代替此参数以创建到操作的路径。" 所以从RoutePrefix中删除{action}。 现在,如果您访问' http://localhost:xxxxx/MyHome/HomeAction',它应该有用。