如何在ASP.NET MVC 5中的两个不同控制器中访问具有相同名称的操作方法?

时间:2018-01-03 12:42:44

标签: c# asp.net-mvc asp.net-mvc-routing attributerouting

使用属性路由(路由属性),我在两个不同的控制器中有两个具有相同名称的操作方法,如下所示

public class HomeController : Controller
{
//URL: /accessMethod
    [Route(“accessMethod”)]
    public ActionResult Method1()
        ViewBag.Message = "Welcome to ASP.NET MVC!";
        return View();
    }
}

public class AccountController : Controller
{
//URL: /accessMethod
    [Route(“accessMethod”)]
    public ActionResult Method2()
        ViewBag.Message = "Welcome to ASP.NET MVC!";
        return View();
    }
}

在点击网址http://localhost:1234/accessmethod时,发生了以下错误

  应用程序中的服务器错误。

     

找到了与URL匹配的多种控制器类型。这个可以   如果多个控制器上的属性路由匹配请求,则会发生   URL。

     

请求已找到以下匹配的控制器类型:   mvc_Test.Controllers.Page1Controller   mvc_Test.Controllers.Page2Controller

请求您,如何在不使用RoutePrefix属性的情况下解决此问题?而不是RoutePrefix,我们可以使用Controller名称吗?那么属性路由的主要用途是什么?

1 个答案:

答案 0 :(得分:0)

您可以将RoutePrefix添加到控制器:

[RoutePrefix("Account")]
public class AccountController : Controller
{ ...

然后,您可以访问http://localhost:1234/account/accessmethod帐户。留下另一个原样

更新:在您的注册路线图中使用以下地图应该适用于http://localhost:1234/account/accessmethodhttp://localhost:1234/home/accessmethod

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