2015-05-10 38 views
0

我有一个MVC .Net C#项目。在主控制器下有计划行动。 但我不想访问此页作为http://....../Home/Plans 但我想访问它作为http://....../Plans 但我不想创建计划控制器。所以我不想做一个redirectToAction。简单的路由到另一个控制器的动作

我试图使用Route Annonation如下所示:

[Route("plans/")] 
public ActionResult Plans() 

[Route("plans/{actions}")] 
public ActionResult Plans() 

[Route("plans/index")] 
public ActionResult Plans() 

但没有上述工作对我来说。你们能帮助我吗?

更新时间:

这是我的HomeController

[Route("plans")] 
public ActionResult Plans() 
{ 
    var servicePlansDto = SubscriberApiManager.SubscriptionSellingService.GetServicePlans(ServiceId).FindAll(sp => !sp.HasPromotionCode); 
    List<ServicePlanVm> servicePlansVm = Mapper.Map<List<ServicePlanDto>, List<ServicePlanVm>>(servicePlansDto); 
    return View(servicePlansVm); 
} 

下行动,这是我的配置

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 } 
      ); 
     } 

回答

0

首先,记得要配置属性的路由:

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 } 
     ); 
    } 

然后注意每个控制器功能必须有不同的名称。在这个例子中,它们具有相同的名称,编译器不接受它。

纬度但并非最不重要,路由属性中{actions}参数的需求是什么?当你定义一个属性路由时,你不需要定义一个动作,因为你的属性已经在装饰一个动作/方法。您可以有需要在你的路由/可选参数,但它们通常对应于方法的sugnature匹配参数:

//Example http://www.domain.com/plans/123 
    [Route("plans/{productId}")] 
    public ActionResult Plans(string productId) 
    { 
     ... 
    } 
+0

感谢您的答复,我的配置属性航线作为你提到它的第一部分。我没有产品ID要通过,我的行动只是 计划(){}没有任何参数。我尝试过[Route(“plans /”)],但失败了。 –

+0

你会得到什么错误? –

+0

由于URL不正确。 –

相关问题