29

我有一个已转换为.NET 4.5的网站项目。我想使用添加到App_Start目录中的AuthConfig 。几个问题。

App_Start目录是否仅可用于 Web 应用程序项目?,当我尝试添加现有的 asp.net 文件夹时,我没有将其视为要添加的选项。

其次,如果是这样的话,我可以在我的网站项目中的任何地方只使用一个AuthConfig文件吗?

4

5 回答 5

20

App_Start 没有什么特别之处,它只是一个文件夹。特殊之处在于它的使用方式,它特定于 WebActivator 框架,它是一个可以安装的 NuGet 包。App_Start 和 WebActivator 并非特定于 .NET 4.5,但它们确实需要 .net 4(这意味着 VS 2010 或 2012)

http://blog.davidebbo.com/2011/02/appstart-folder-convention-for-nuget.html

于 2013-01-09T04:51:07.573 回答
19

App_Start 文件夹是作为 MVC4 模板的一部分引入的。它没有什么特别之处,可以按照约定在其中执行代码。例如,HotTowel SPA 模板在 App_Start 文件夹中创建以下内容:

待办事项图

App_Start 中的代码由 global.asax.cs 执行,如下所示。

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AuthConfig.RegisterAuth();
    }
于 2013-09-26T21:22:03.453 回答
13

虽然App_Start 没有什么特别之处,但是你可以让这个文件夹中的文件在应用程序启动时像Application_Start里面一样执行Global.asax。我在有文件夹的项目中使用Ninject依赖注入器。App_Start我的项目中没有 Global.asax文件:

在此处输入图像描述

但是我在文件中设置的所有配置都NinjectWebCommon将在启动应用程序时执行。NinjectWebCommon有以下内容:

using WebFormNinject.Models;

[assembly: WebActivator.PreApplicationStartMethod(typeof(WebFormNinject.App_Start.NinjectWebCommon), "Start")]
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(WebFormNinject.App_Start.NinjectWebCommon), "Stop")]

namespace WebFormNinject.App_Start
{
    using System;
    using System.Web;

    using Microsoft.Web.Infrastructure.DynamicModuleHelper;

    using Ninject;
    using Ninject.Web.Common;

    public static class NinjectWebCommon 
    {
        private static readonly Bootstrapper bootstrapper = new Bootstrapper();

        /// <summary>
        /// Starts the application
        /// </summary>
        public static void Start() 
        {
            DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
            DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
            bootstrapper.Initialize(CreateKernel);
        }

        /// <summary>
        /// Stops the application.
        /// </summary>
        public static void Stop()
        {
            bootstrapper.ShutDown();
        }

        /// <summary>
        /// Creates the kernel that will manage your application.
        /// </summary>
        /// <returns>The created kernel.</returns>
        private static IKernel CreateKernel()
        {
            var kernel = new StandardKernel();
            kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
            kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();

            RegisterServices(kernel);
            return kernel;
        }

        /// <summary>
        /// Load your modules or register your services here!
        /// </summary>
        /// <param name="kernel">The kernel.</param>
        private static void RegisterServices(IKernel kernel)
        {
            kernel.Bind<IDisplay>().To<MockDisplay>();
        }        
    }
}

我很好奇RegisterServices函数将在哪里执行!然后我注意到这段代码:

[assembly: WebActivator.PreApplicationStartMethod(typeof(WebFormNinject.App_Start.NinjectWebCommon), "Start")]
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(WebFormNinject.App_Start.NinjectWebCommon), "Stop")]

这些属性使Start方法在应用程序启动时执行。有关更多信息,请查看WebActivator / PreApplicationStartMethod

于 2014-02-07T10:40:12.683 回答
2

简而言之:要更深入地了解 ASP.NET 4.5 网站中的配置更改,请查看以下官方来源 - ASP.NET 4.5 网站模板中的配置更改

它将指导您在 ASP.NET 网站的较新版本上发生的每项更改,即 4.5

于 2013-01-09T04:11:03.240 回答
1

如果您希望它在新的 MVC 5 模板上配置您的路由映射,您可以在 Configure 方法中的 Startup.cs 文件中设置您的路由

于 2018-10-17T16:38:45.237 回答