ASP.NET MVC自定义控制器无法正常工作

时间:2017-06-08 10:16:32

标签: asp.net 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未找到的异常。

当我使用默认的Controller类时,它可以工作。

首先我的控制器位于Project.Web项目中名为Controllers的文件夹中。当我在路由配置中添加此命名空间时,它也不起作用。

然后我将这些控制器(不是基本控制器)移动到我的其他项目Project.Web.UI,但仍然没有运气。

Project.Web项目是一个类库,Project.Web.UI是一个Web项目。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案。问题是我使用添加引用添加了System.Web.Mvc。但是这与我的网络项目中的System.Web.Mvc版本不同。

删除此引用并在Web项目中添加对dll的引用后,一切都像魅力一样!