【问题标题】:Use of AuthConfig, BundleConfig, FilterConfig , RouteConfig and WebApiConfig in App_Start() folder in MVC在 MVC 的 App_Start() 文件夹中使用 AuthConfig、BundleConfig、FilterConfig、RouteConfig 和 WebApiConfig
【发布时间】:2013-11-13 09:12:59
【问题描述】:

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

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

【问题讨论】:

    标签: asp.net-mvc-4 configuration-files


    【解决方案1】:

    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 special folder。如果需要,您可以重命名文件夹。名称只是一个约定,如App_GlobalResouces 等。

    更新:

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

    【讨论】:

    • 谢谢拉吉。我详细浏览了 RouteConfig,添加了映射,创建了路由约束,并发现了一些有趣的东西。你能解释一下剩余文件的用途吗?
    • @HarshaChunduri 用其他信息更新答案。
    • 非常感谢 Raj 的快速回复。
    • @HarshaChunduri 这个答案是否对您有足够的信息,还是您需要更多信息?
    • 浏览给定的链接,非常感谢 Raj。
    【解决方案2】:

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

    • BundleConfig.cs
    • FilterConfig.cs
    • RouteConfig.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.Web.Optimization 程序集

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

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

    第 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 步:

    上面的 bundle 在 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 步:

    注册捆绑包

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

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

    缩小是一种去除不必要字符的技术(例如 JavaScript 和 CSS 中的空格、换行符、制表符)和 cmets 文件以减小大小,从而提高网页的加载时间。为了 例如。 jquery-1.7.1.min.js 是 jquery-1.7.1 的缩小 js 文件, 主要用于生产环境,对于非产品你可以更好地使用非 缩小 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)}


    FilterConfig.cs:

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

    例如。

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

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

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

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

    您可以通过实施
    来创建您的 CustomAuthentication 过滤器属性 IAuthenticationFilter如下图-


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

    在 OnAuthentication 方法之后运行

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

    配置过滤器

    您可以在您的应用程序中配置您自己的自定义过滤器: 以下三个层次:

    全球层面

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

     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:控制器, action 后跟 id(如果有)。第 6 行:默认控制器将是 Home,默认操作是 Index 和 Id 是可选的。


    WebApiConfig.cs:

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

    AuthConfig.cs:

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

    【讨论】:

      【解决方案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 配置设置。

      【讨论】:

        【解决方案4】:

        在之前的 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:设置WEB API的路由设置(注意:url中不需要操作)

        【讨论】:

          【解决方案5】:
          • AuthConfi g.cs:用于配置安全设置,包括用于 OAuth 登录的站点。

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

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

          • RouteConfi g.cs:保存 MVC 配置语句的祖父,Route conf

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

          【讨论】:

            【解决方案6】:

            所有这些设置都在 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)的凭据登录,

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-11-18
              • 1970-01-01
              • 2017-02-25
              • 2021-07-08
              • 2012-11-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多