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