ASP.NET MVC 自定义控制器不起作用



>我有一个名为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 的引用后,一切都像魅力一样工作!

最新更新