Jon*_*Jon 8 c# asp.net-mvc asp.net-web-api asp.net-mvc-5
我在类库中有控制器,但我无法弄清楚如何让主项目识别它们.主项目引用了我的类库.我需要在某处注册吗?
我想同时使用控制器和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 }
);
}
}
Run Code Online (Sandbox Code Playgroud)
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 }
);
}
}
Run Code Online (Sandbox Code Playgroud)
控制器我试图先工作:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
我在主项目中的Views内的UI文件夹中创建了一个Test.cshtml.Explorer.cshtml和StartMenu.cshtml位于共享内部视图中.
您的控制器类名称是否以"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);
}
Run Code Online (Sandbox Code Playgroud)
来自:https://www.simple-talk.com/dotnet/asp.net/asp.net-mvc-controllers-and-conventions/
这意味着使用控制器对组件的简单引用就足够了.
如果您的控制器满足这些规则,您应该没问题.
| 归档时间: |
|
| 查看次数: |
1407 次 |
| 最近记录: |