在ASP.NET WebAPI中调用不同文件夹中的控制器

时间:2014-11-08 17:47:58

标签: c# asp.net-mvc asp.net-web-api

我的ASP.NET WebAPI项目中有100%的javascript应用程序。此应用程序使用我的API方法中的所有数据。

现在,我被要求在我的WebAPI项目中创建一个用Razor和HTML构建的简单门户(就像MVC项目一样)。

所以我在" 控制器"下创建了一个文件夹。文件夹名为" 门户"我放置了所有门户网站独家控制器。

以下是Controllers结构文件夹:

enter image description here

这是我的Razor Web应用程序视图结构:

enter image description here

因此,当我运行应用程序时,我可以看到“登录”页面视图(在" 帐户"文件夹下)。当我单击我的登录按钮时,我调用我的CommonController(门户网站)来渲染左菜单,但是我收到错误:

enter image description here

我猜是因为我有2个CommonControllers,但是1个用于我的javascript应用程序,另一个用于我的Portal应用程序。

我的Index.cshtml中调用公共控制器的行是:

 <div class="page-header page-header-blue">
  @Html.Action("Header", "Common")
  <h1><i class="icon-bar-chart"></i> Dashboard</h1>
</div>

在我的WebApiConfig.cs我有以下Web Api路线:

 config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}"
            );
  

所以我不知道如何告诉它我想要打电话给{34>} 门户&#34;文件夹中。

关于如何做到这一点和最佳做法的任何线索或建议?

更新

我为Portal控制器创建了其他路由:

CommonController

似乎可以正常工作,但在我的index.cshtml调用中: config.Routes.MapHttpRoute( name: "DefaultMvc", routeTemplate: "portal/{controller}/{action}" ); 如何告诉操作调用@Html.Action("Header", "Common")而不只是Portal Common

1 个答案:

答案 0 :(得分:1)

我认为您可以根据自己的情况使用区域。

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "Billing_default",
        "Admin/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional }
    );
}

您需要更新Application_Start方法

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

Area in MVC 5 with example - step by step