31

您能否详细解释一下,MVC4 中 App_Start() 文件夹的使用?我看到这个文件夹在以前版本的 MVC 中实际上是不可用的。此文件夹中有 5 个文件。

  1. 授权配置
  2. 捆绑配置,
  3. 过滤器配置,
  4. 路由配置,
  5. WebApiConfig。
4

6 回答 6

39

App_Start只是将 ASP.NET MVC 配置组合在一起的另一个文件夹,在以前版本的 ASP.NET MVC 中是在Global.asax.

ASP.NET MVC 引入了越来越多的配置元素,这个文件夹非常适合放置这个配置。例如,MVC 5 的新身份验证。配置(例如第三方登录提供程序)也放置在此文件夹中(在 中Startup.Auth.cs)。

App_Start不是ASP.NET/IIS 识别的ASP.NET 特殊文件夹。如果需要,您可以重命名文件夹。这个名字只是一个约定,比如App_GlobalResouces等等。

更新:

以下是每个文件的一些信息和参考点。这些文件的使用非常简单。我提供了一些在线参考资料,可能会帮助您了解更多信息。

于 2013-11-13T09:54:38.617 回答
16

在 Mvc4 中引入了 app_start 文件夹。它包含各种配置文件,例如:

  • BundleConfig.cs
  • 过滤器配置文件
  • 路由配置.cs
  • WebApiConfig.cs
  • AuthConfig.cs

App_start 不是 MVC 中的特殊文件夹,也不是其中的类文件,这些只是具有不同应用程序配置(过滤、捆绑、路由等)的普通类文件,所有这些设置都在 Global.asax.cs 文件的 Application_Start 方法中注册.


BundleConfig.cs:

这用于为 CSS 和 JS 文件创建和注册包。例如。jQuery、jQueryUI、jQuery 验证、Modernizr 和网站 CSS..

捆绑和缩小是通过减少对服务器的请求数量和减少请求的资产(例如 CSS 和 JavaScript)的大小来缩短请求加载时间的两种技术 。Microsoft 提供了 Microsoft.Web.Optimization 的程序集

例如。让我们创建两个 Bundle。一个用于样式(css),另一个用于脚本(javascript)


您可以通过调用BundleConfig.cs 文件中的 BundleCollection 类 Add() 方法分别为 css 和 javascripts 创建包。

步骤1:

创建样式包

bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.min.css",
"~/Content/mystyle.min.css"));

创建脚本包

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
 "~/Scripts/jquery-1.7.1.min.js",
 "~/Scripts/jquery.validate.min.js"));

第2步:

上面的包在 BundleConfig 类中定义为:

public class BundleConfig
{
 public static void RegisterBundles(BundleCollection bundles)
 {
 //Adding StyleBundle to BundleCollection
 bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.min.css",
 "~/Content/mystyle.min.css"));

 //Adding ScriptBundle to BundleCollection
 bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
 "~/Scripts/jquery-1.7.1.min.js",
 "~/Scripts/jquery.validate.min.js"));
 }
} 

第 3 步:

注册捆绑包

所有包都在 Global.asax 的 Application_Start 事件中注册:

protected void Application_Start()
{
 BundleConfig.RegisterBundles(BundleTable.Bundles);
}

缩小是一种技术,用于从 JavaScript 和 CSS 文件中删除不必要的字符(如空格、换行符、制表符)和注释以减小大小,从而缩短网页的加载时间。例如。jquery-1.7.1.min.js 是 jquery-1.7.1 的缩小版 js 文件,主要用于生产环境,非 prod 可以更好地使用非缩小版 js 以获得更好的可读性。

例如。

未压缩的 js 中的 Jquery 函数可能类似于:

( function( global, factory ) {

    "use strict";

    if ( typeof module === "object" && typeof module.exports === "object" ) {

        // For CommonJS and CommonJS-like environments where a proper `window`
        // is present, execute the factory and get jQuery.
        // For environments that do not have a `window` with a `document`
        // (such as Node.js), expose a factory as module.exports.
        // This accentuates the need for the creation of a real `window`.
        // e.g. var jQuery = require("jquery")(window);
        // See ticket #14549 for more info.
        module.exports = global.document ?
            factory( global, true ) :
            function( w ) {
                if ( !w.document ) {
                    throw new Error( "jQuery requires a window with a document" );
                }
                return factory( w );
            };
    } else {
        factory( global );
    }

压缩或缩小的 js 中相同的上述函数将如下所示:

!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}


过滤器配置.cs:

这用于创建和注册全局 MVC 过滤器:

例如。

  • 身份验证过滤器 (首先执行)
  • 授权过滤器
  • 动作过滤器
  • 结果过滤器
  • 异常过滤器 (最后执行)

注意:如上所述,过滤器按顺序执行。

例如。MVC5 引入的身份验证过滤器:

 public interface IAuthenticationFilter
 {
  void OnAuthentication(AuthenticationContext filterContext); 
  void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext);
 }

您可以通过实现
IAuthenticationFilter 来创建您的 CustomAuthentication 过滤器属性,如下所示 -


  public class CustomAuthenticationAttribute : ActionFilterAttribute, IAuthenticationFilter
  {
   public void OnAuthentication(AuthenticationContext filterContext)
   { 
    //logic goes here
   }

在 OnAuthentication 方法之后运行

     public void OnAuthenticationChallenge(AuthenticationChallengeContext
 filterContext)
         {
            {  
              //logic goes here
             }
         }

配置过滤器

您可以在以下三个级别将自己的自定义过滤器配置到您的应用程序中:

全球水平

通过将您的过滤器注册到 Global.asax.cs 文件的 Application_Start 事件中:

 protected void Application_Start()
 {
  FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
 }

控制器级别

通过将您的过滤器放在控制器名称的顶部:

 [Authorize(Roles="Admin")]
 public class AdminController : Controller
 {
  // Logic goes here
 }

行动层面

通过将您的过滤器放在操作名称的顶部:

 public class UserController : Controller
 {
  [Authorize(Users="User1,User2")]
  public ActionResult LinkLogin(string provider)
  {
  // Logic goes here
  return View();
  }
 }

RouteConfig.cs:

这用于为您的 Asp.Net MVC
应用程序注册各种路由模式。路由在 ASP.NET MVC 应用程序执行流程中起着重要作用,它使用路由表将请求 URL 映射到特定的控制器操作。我们可以为引擎定义路由规则,以便它可以将 > 传入的 URL 映射到适当的控制器。路由引擎使用 Global.asax 文件中定义的路由规则来解析 URL 并找出相应控制器的路径。我们可以在 Global.asax 文件的 Application_Start() 方法中找到以下代码。

protected void Application_Start()
     {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes); 
        BundleConfig.RegisterBundles(BundleTable.Bundles);
     }

我们可以在 App_Start 文件夹下找到 RouteConfig.cs 文件。如果我们在 RouteConfig 类中遵循这个方法,我们会找到一个默认配置的路由,如下所示。第 3 到 7 行正在配置一条默认路由。

public static void RegisterRoutes(RouteCollection routes)
{
1.   routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”);
2.
3.  routes.MapRoute(
4.      name: “Default”,
5.      url: “{controller}/{action}/{id}”,
6.      defaults: new { controller = “Home”, action = “Index”, id = UrlParameter.Optional }
7.      );
}

第 4 行:路线的名称。第 5 行:表示 URL:控制器,后跟 id 的操作(如果有)。第 6 行:默认控制器是 Home,默认操作是 Index,Id 是可选的。


WebApiConfig.cs:

这用于注册各种 WEB API 路由,如 Asp.Net MVC,以及设置任何附加的 WEB API 配置设置。

AuthConfig.cs:

用于注册外部身份验证提供程序,例如。如果您想让用户使用来自外部提供商(例如 Facebook、Twitter、Microsoft 或 Google)的凭据登录,然后将这些提供商的一些功能集成到您的 Web 应用程序中。

于 2016-08-09T20:39:32.137 回答
3

在 Mvc4 中引入了 app_start 文件夹。它包含各种配置文件,例如:

  • BundleConfig.cs,
  • FilterConfig.cs,
  • RouteConfig.cs,
  • WebApiConfig.cs

为您的应用程序。所有这些设置都在 Global.asax.cs 文件的 App_Start 方法中注册

BundleConfig.cs:

这用于为 CS 和 JS 文件创建和注册包。默认情况下,此文件中添加了各种包,包括 jQuery、jQueryUI、jQuery 验证、Modernizer 和 Site Css..

FilterConfig.cs-

这用于创建和注册全局 MVC 过滤器错误过滤器、动作过滤器等​​。默认情况下它包含 HandleErrorAttribute 过滤器。

RouteConfig.cs-

这用于为您的 Asp.Net MVC 应用程序注册各种路由模式。默认情况下,这里注册了一个名为 Default Route 的路由。

WebApiConfig.cs-

这用于注册各种 WEB API 路由,如 Asp.Net MVC,以及设置任何其他 WEB API 配置设置。

于 2015-02-06T23:55:42.243 回答
1

在之前的 MVC 版本中,我们只是在 global.asax 文件中有 RegisterRoutes() 方法来配置路由。MVC 4 内置了用于开发移动 Web 应用程序的模板、web apis(restful http 服务)。所以为所有这些模板驱动的开发配置路由,我们将使用 AuthConfig.cs(Authorization)、BundleConfig.cs(web potimization ),,FilterConfig.cs,RouteConfig.cs,WebApiConfig.cs(WEB API) 文件,它们将保存在 App_start 文件夹中。让我们看看每个 config.cs 文件。AuthConfig.cs - 此文件中的设置允许您使用第三方客户端凭据(如 fb 帐户、google 帐户、yahoo 帐户等)登录到 ASP.NET MVC 站点。或者您也可以注册。BundleConfig.cs:此文件中的设置允许使用捆绑来提高应用程序的性能... WebApiConfig:

于 2014-09-12T10:50:25.277 回答
0
  • AuthConfi g.cs:用于配置安全设置,包括用于 OAuth 登录的站点。

  • BundleConfi g.cs:用于注册捆绑和小型化系统使用的捆绑包。默认添加了几个包,包括 jQuery、jQueryUI、jQuery 验证、Modernizr 和默认 CSS 引用。

  • FilterConfi g.cs:不出所料,这是用来注册全局 MVC 过滤器的。默认情况下注册的唯一过滤器是 HandleErrorAttribute,但这是放置其他过滤器注册的好地方。

  • RouteConfi g.cs:保存 MVC 配置语句的祖父,路由配置。

  • WebApiConfig.cs:用于注册 Web API 路由,以及设置任何其他 Web API 配置设置。

于 2014-12-29T10:07:18.880 回答
0

所有这些设置都在 Global.asax.cs 文件的 App_Start 方法中注册

BundleConfig.cs:

这用于为模板中的 CS 和 JS 文件创建和注册包。

FilterConfig.cs- 这用于创建和注册全局 MVC 过滤器错误过滤器

RouteConfig.cs-

这用于为您的 Asp.Net MVC 应用程序注册各种路由模式。

WebApiConfig.cs- 这用于注册各种 WEB API 路由,例如希望使用来自外部提供商(如 Facebook、Twitter、Microsoft 或 Google)的凭据登录,

于 2018-04-23T13:49:29.893 回答