2016-09-06 167 views
0

任何人都可以解释我关于属性路由。我对此有疑问。MVC中的属性路由

当我使用“唯一”属性路由时,我得到了以下错误。

  1. 当URL是 “http://localhost:51254/”:

HTTP错误403.14 - 禁止访问Web服务器被配置为不列出此目录的 内容。

  • 当URL是 “http://localhost:51254/MyHome/HomeAction
  • 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

    所以,如果我refraim问题,那么这将是这样的:
    是它强制性使用基于约定的路由和objRouteCollection.mapRoute方法? 因为如果我加MapRoute方法它的工作很好。

    我搜索了但找不到任何答案我的问题。对于实施例msdnc-SharpCorner

    回答

    2

    当操作方法装饰有路由属性,它不再能够从在RouteConfig.cs定义的基于惯例路由访问

    MVC预计RoutePrefix文字串,否则就会给运行时错误。实际错误:“操作方法的直接路由不能使用参数'action'。指定一个文字路径代替此参数来创建一个到该操作的路由。” 因此,从RoutePrefix中删除{action}。 现在,如果您访问'http://localhost:xxxxx/MyHome/HomeAction',它应该工作。

    +0

    此外,如果我只使用属性路由,那么我必须用'路由'属性来修饰每个动作方法。 –

    +0

    没必要。您可以为单个控制器的操作方法自由组合属性路由和基于约定的路由。控制器的某些操作方法可以具有属性路由(这些方法不能通过基于约定的路由来调用),并且可以通过基于约定的路由(这些方法不具有'路由'属性)来调用来自同一控制器的其他操作方法。 – Sarang