我在类库中有控制器,但我无法弄清楚如何让主项目识别它们。主项目引用了我的类库。我需要在某处注册吗?
我想同时使用控制器和ApiControllers。
修改
路线配置 - 与创建项目无关:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Page", action = "Dashboard", id = UrlParameter.Optional }
);
}
}
WebApi配置,再次保持不变:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
控制器我正试图先行动:
public class UIController : Controller
{
[ChildActionOnly]
public PartialViewResult StartMenu()
{
StartMenu menu = StartMenuFactory.Get();
return PartialView(menu);
}
[ChildActionOnly]
public PartialViewResult Explorer()
{
return PartialView();
}
//
// GET: /Page/
public ActionResult Test()
{
return View();
}
}
我在主项目中的Views内的UI文件夹中创建了一个Test.cshtml。 Explorer.cshtml和StartMenu.cshtml位于共享内部视图中。
答案 0 :(得分:5)
您的控制器类名是否以" Controller"结尾,这是强制性的。
你正在做什么应该工作,控制器工厂这样做:
...默认工厂使用类型缓存 内部。类型缓存在。中实现 ControllerTypeCache类。在应用程序初始化期间, ControllerTypeCache类使用.NET反射来枚举所有 引用程序集并探索它们寻找公开曝光 控制器类型。控制器类型是传递的任何引用类型 以下测试:
static bool IsControllerType(Type t)
{
return
t != null &&
t.IsPublic &&
t.Name.EndsWith("Controller", StringComparison.OrdinalIgnoreCase) &&
!t.IsAbstract &&
typeof(IController).IsAssignableFrom(t);
}
来自:https://www.simple-talk.com/dotnet/asp.net/asp.net-mvc-controllers-and-conventions/
这意味着使用控制器对程序集的简单引用就足够了。
如果您的控制器满足这些规则,您应该没问题。
答案 1 :(得分:0)
由于许多因素,API控制器的解决方案将与常规MVC的解决方案不同。有关如何处理Web API控制器的信息,请参阅以下内容:using external web api controllers