【问题标题】:how do I access action methods with same name in two different controllers in ASP.NET MVC 5? [duplicate]如何在 ASP.NET MVC 5 的两个不同控制器中访问具有相同名称的操作方法? [复制]
【发布时间】:2018-06-13 03:27:39
【问题描述】:

使用属性路由(Route Attribute),我在两个不同的控制器中有两个同名的动作方法如下

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

在点击 url http://localhost:1234/accessmethod 时,出现以下错误

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

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

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

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

【问题讨论】:

  • 你有一个路由冲突,因为两者都映射到相同的路径。路线必须是唯一可识别的。
  • 这似乎是XY problem。您要达到的最终目标是什么?
  • 考虑使用路由前缀
  • 感谢您的回复。如何在不使用 RoutePrefix 属性的情况下解决此问题?取而代之的是RoutePrefix,我们可以使用Controller名称对吗?那么Attribute Routing的主要用途是什么?

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


【解决方案1】:

您可以将 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 
});

【讨论】:

  • 感谢您的回复,如何在不使用RoutePrefix 属性的情况下解决此问题?取而代之的是 RoutePrefix,我们可以使用 Controller 名称对吗?那么Attribute Routing的主要用途是什么?
  • 当然可以通过约定路由来管理。但是当你想出更多不同的路由模式时,你最终可能会在 Global.asax 中注册更多的路由映射,如下所述:exceptionnotfound.net/attribute-routing-vs-convention-routing。属性路由是一种替代方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
相关资源
最近更新 更多