【问题标题】:ASP.NET MVC5, two controller, with the same name in different foldersASP.NET MVC5,两个控制器,不同文件夹同名
【发布时间】:2016-12-16 12:49:10
【问题描述】:
我有两个名为 FilmController 的文件。一个在控制器文件夹中显示我的数据库数据,另一个在名为 API 的文件夹中,允许用户查看 json 格式的数据。
我的问题是,在我创建 API 之前,在我的导航栏中,我有一个链接到控制器文件夹电影文件的操作链接项。现在它没有目标是哪一个。反正有没有针对特定的。
<li>@Html.ActionLink("Films", "Index", "Film")</li>
我希望它指向控制器/电影文件。
【问题讨论】:
标签:
c#
asp.net
asp.net-mvc
asp.net-mvc-5
【解决方案1】:
您不能使用 ActionLink 帮助器来定位特定的 Controller 类。
但是,您可以在 RouteConfig.cs 中创建第二个路由定义。让这条路由指向另一个命名空间。然后将你的 API 代码放在这个命名空间中:
routes.MapRoute(
"API",
"api/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new[] { "MyMvcApp.Api" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
【解决方案2】:
对于那些在不同文件夹中有两个具有相同名称的控制器有类似问题的人,请考虑在您的 ASP NET MVC 项目中使用Areas 并将这些控制器中的每一个放到不同的区域。然后,如果您在视图中使用@Html.ActionLink("Name", "Action", "Controller"),它将始终根据您所在的区域选择控制器,如果您想从另一个区域链接到控制器,您可以使用@Html.ActionLink("Name", "Action", "Controller", new { area = "AreaName" }, null)。
【解决方案3】:
听起来您正在使用标准控制器作为 api 控制器。一个应该是 Controller 类型,另一个是 ApiController,那么它们都可以同名存在。 @Html.ActionLink 只会路由到控制器。
public class FilmController : ApiController