Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET WebAPI的不同文件夹中调用控制器_C#_Asp.net Mvc_Asp.net Web Api - Fatal编程技术网

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

C# 在ASP.NET WebAPI的不同文件夹中调用控制器,c#,asp.net-mvc,asp.net-web-api,C#,Asp.net Mvc,Asp.net Web Api,我的ASP.NET WebAPI项目中有一个100%的javascript应用程序。此应用程序使用我的API方法中的所有数据 现在,我被要求在WebAPI项目中创建一个内置Razor和HTML的简单门户(就像MVC项目一样) 因此,我在“控制器”文件夹下创建了一个名为“门户”的文件夹,我在其中放置了我的所有门户专用控制器 以下是控制器结构文件夹: 这是我的Razor web应用程序视图结构: 因此,当我运行应用程序时,我可以看到登录页面视图(在“帐户”文件夹下)。当我单击我的登录按钮时,我调

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

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

因此,我在“控制器”文件夹下创建了一个名为“门户”的文件夹,我在其中放置了我的所有门户专用控制器

以下是控制器结构文件夹:

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

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

我猜是因为我有2个
CommonControllers
,但1个用于服务我的javascript应用程序,另一个用于我的门户应用程序

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

 <div class="page-header page-header-blue">
  @Html.Action("Header", "Common")
  <h1><i class="icon-bar-chart"></i> Dashboard</h1>
</div>
所以我不知道如何告诉它我想调用“Portal”文件夹下的
CommonController

关于如何做到这一点以及最佳实践,有什么线索或建议吗

更新:

我已经为我的门户控制器创建了其他路由:

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

似乎有效,但在我的index.cshtml调用中:
@Html.Action(“Header”、“Common”)
我如何告诉该操作调用
Portal Common
,而不仅仅是
Common

我认为您可以为您的案例使用区域

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "Billing_default",
        "Admin/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional }
    );
}
您需要更新应用程序的启动方法

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

可能的重复阅读可能重复的解决方案,但我不明白。我一直在考虑只为门户应用程序创建另一个web项目。我相信这与我的问答有关。这是关于URL路由模块如何优先考虑路由空间如果我创建一个更好的单独项目,你认为如何?两个项目都将使用我的共享业务规则dll、服务dll等。
protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}