在MVC的App_Start()文件夹中使用AuthConfig,BundleConfig,FilterConfig,RouteConfig和WebApiConfig

时间:2013-11-13 09:12:59

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

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

  1. AuthConfig
  2. BundleConfig,
  3. 一个FilterConfig,
  4. RouteConfig,
  5. WebApiConfig。

6 个答案:

答案 0 :(得分:36)

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

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

App_Start不是ASP.NET / IIS认可的ASP.NET special folder。您可以根据需要重命名该文件夹。名称只是一个约定,如App_GlobalResouces等。

更新

以下是每个文件的一些信息和参考点。使用这些文件非常简单。我已经包含了一些可能有助于您了解更多信息的在线参考资料。

答案 1 :(得分:14)

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

  • BundleConnfig.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和Site CSS ..

     

捆绑和缩小是两种提高请求加载时间的技术   减少对服务器的请求数量并减少其大小   请求的资产(例如CSS和JavaScript。)    Microsoft为相同的

提供程序集Microsoft.Web.Optimization

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

  

您可以通过调用
来分别为css和javascripts创建包   BundleCollection类BundleConfig.cs文件中的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步:

  

注册捆绑

     

所有捆绑包都在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文件,  主要用于生产环境,非产品你可以更好地使用非  缩小的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应用程序中起着重要作用   执行流程,它使用a将请求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:Controller,   动作后跟id(如果有的话)。第6行:默认控制器   首页,默认操作将是索引,ID是可选的。

WebApiConfig.cs:

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

AuthConfig.cs:

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

答案 2 :(得分:3)

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

  • BundleConnfig.cs,
  • FilterConfig.cs,
  • RouteConfig.cs,
  • WebApiConfig.cs

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

<强> BundleConfig.cs:

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

<强> FilterConfig.cs -

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

<强> RouteConfig.cs -

这用于为您的Asp.Net MVC应用程序注册各种路由模式。默认情况下,此处注册了一条名为“默认路由”的路由。

<强> WebApiConfig.cs -

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

答案 3 :(得分:1)

在以前版本的MVC中,我们只在global.asax文件中使用RegisterRoutes()方法来配置路由。 MVC 4内置模板来开发移动Web应用程序,web apis(restful http服务).so来配置所有那些模板驱动开发的路由,我们将使用 AuthConfig.cs(授权),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中不需要任何操作)

答案 4 :(得分:0)

  • AuthConfi g.cs:用于配置安全设置,包括OAuth登录网站。

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

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

  • RouteConfi g.cs:保存MVC confi g语句的祖父,Route confi guration。

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

答案 5 :(得分: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)的凭据登录,