>我有一个名为Project.Web
的项目,其中包含一个文件夹Mvc
其中包括一个名为BaseController.cs
的基本控制器。
namespace ProsecVHIPHelper.Web.Mvc
{
/// <summary>
/// A base controller for all controllers
/// </summary>
public abstract class BaseController : Controller
{
/// <summary>
/// Constructor
/// </summary>
/// <param name="applicationContext"></param>
protected BaseController(ApplicationContext applicationContext)
{
if (applicationContext == null) throw new ArgumentNullException("applicationContext");
ApplicationContext = applicationContext;
}
/// <summary>
/// Default constructor
/// </summary>
protected BaseController() : this(ApplicationContext.Current) { }
/// <summary>
/// The application context
/// </summary>
public ApplicationContext ApplicationContext
{
get;
private set;
}
/// <summary>
/// Get the services singleton
/// </summary>
public ServiceContext Services
{
get { return ApplicationContext.Services; }
}
}
}
这个基本控制器将由我的所有其他控制器使用。
在我的第二个名为Project.Web.UI
的项目中,我有一个路由配置,如下所示:
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 = "Ftp", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "Project.Web.Mvc" }
);
}
}
我包含基本控制器命名空间的地方。
但是当我使用基本控制器创建新控制器时,我总是收到 404 未找到异常。
当我使用默认的控制器类时,它可以工作。
首先,我的控制器位于Project.Web
项目中名为Controllers
的文件夹中。当我在路由配置中添加此命名空间时,它不起作用。
然后我把这些控制器(不是基本控制器(移到了我的另一个项目Project.Web.UI
,但仍然没有运气。
Project.Web
项目是一个类库,Project.Web.UI
是一个 Web 项目。
有什么想法吗?
我已经找到了解决方案。问题是我使用添加引用添加了System.Web.Mvc
。但这与我的 Web 项目中的System.Web.Mvc
版本不同。
删除此引用并在 Web 项目中添加对 dll 的引用后,一切都像魅力一样工作!