asp.net mvc、Global.asax、作用、用法

Global.asax如何被加载?

Global.asax 文件会自动在 ASP.NET MVC 应用程序启动时被加载。Global.asaxASP.NET 的一个全局应用程序类,它定义了一些应用程序级别的事件,例如 Application_Start 事件、Application_End 事件、Session_Start 事件等。

ASP.NET MVC 应用程序启动时,它将自动创建 HttpApplication 对象,并在其中执行 Application_Start 方法,这个方法通常用来进行一些初始化操作,例如注册路由规则、注册依赖注入容器、注册全局过滤器等。

因此,如果你需要在 ASP.NET MVC 应用程序启动时执行一些自定义的初始化代码,可以将它们放在 Global.asax 文件的 Application_Start 方法中。同时,请注意不要在 Application_Start 方法中进行耗时的操作或阻塞线程,以免影响应用程序的性能和稳定性。

Global.asax 的常见用法

ASP.NET MVC 中,Global.asax 是一个全局应用程序类,它提供了一种机制来访问和处理应用程序级别的事件。通过 Global.asax 文件,我们可以在应用程序中实现自定义路由、过滤器、模型绑定等功能。

以下是 Global.asax 的常见用法:

1.注册全局过滤器
我们可以通过 Global.asax 文件注册全局过滤器,以便在整个应用程序中重复使用相同的逻辑。例如:

public class MvcApplication : HttpApplication
{
    protected void Application_Start()
    {
        // 注册全局过滤器
        GlobalFilters.Filters.Add(new MyFilter());
    }
}

在这个例子中,我们在 Application_Start 方法中注册了一个名为 MyFilter 的全局过滤器,它将应用于所有控制器和操作方法。

2.自定义路由规则
我们可以在 Global.asax 文件中定义自定义的路由规则,以覆盖默认的路由规则。例如:

public class MvcApplication : HttpApplication
{
    protected void Application_Start()
    {
        // 注册自定义路由规则
        RouteTable.Routes.MapRoute(
            name: "MyRoute",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

在这个例子中,我们使用 MapRoute 方法定义了一个名为 MyRoute 的自定义路由规则,它将匹配 URL 中的控制器、操作方法和参数,并在没有定义参数时使用默认值。

3.注册依赖注入容器
我们可以在 Global.asax 文件中注册依赖注入容器,以便在应用程序中使用依赖注入。例如:

public class MvcApplication : HttpApplication
{
    protected void Application_Start()
    {
        // 注册依赖注入容器
        var container = new UnityContainer();
        container.RegisterType<IMyService, MyService>();
        DependencyResolver.SetResolver(new UnityDependencyResolver(container));
    }
}

在这个例子中,我们使用 UnityContainer 类创建了一个依赖注入容器,并在其中注册了 IMyService 接口和 MyService 实现类。然后,我们使用 UnityDependencyResolver 包装容器,并将其注册为 ASP.NET MVC 中的默认依赖注入解析器。

4.自定义模型绑定器
我们可以在 Global.asax 文件中注册自定义的模型绑定器,以处理自定义类型的绑定。例如:

public class MvcApplication : HttpApplication
{
    protected void Application_Start()
    {
        // 注册自定义模型绑定器
        ModelBinders.Binders.Add(typeof(MyType), new MyModelBinder());
    }
}

在这个例子中,我们使用 ModelBinders 类注册了一个自定义的模型绑定器 MyModelBinder,它将处理 MyType 类型的绑定。在应用程序中,当需要绑定 MyType 类型的参数时,将调用 MyModelBinder 来完成绑定。

总之,Global.asax 允许我们在应用程序级别定义和处理全局事件,从而增强了应用程序的灵活性和可扩展性。

GlobalConfiguration.Configure()用法

GlobalConfiguration.Configure() 方法是 ASP.NET Web API 框架中的一个静态方法,它可以用来配置 Web API 框架的各种设置和功能。

ASP.NET Web API 2 中,我们通常会将 GlobalConfiguration.Configure() 方法放在 Global.asax 文件的 Application_Start 方法中,以便在应用程序启动时进行 Web API 的全局配置。具体用法如下:

配置 Web API 路由规则
GlobalConfiguration.Configure() 方法可以用来配置 Web API 的路由规则,以便客户端可以通过 HTTP 请求访问 Web API 的控制器和操作方法。

例如,以下代码配置了一个基于属性路由的 Web API 路由规则:

public class Global : HttpApplication
{
    protected void Application_Start()
    {
        // 配置 Web API 路由规则
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
}

在这个例子中,WebApiConfig.Register 是一个静态方法,它将在 GlobalConfiguration.Configure() 方法中被调用,用来注册 Web API 的路由规则。上面提到的Global.asax 的常见用法中使用的各种注册方式,都可以写入在Register这个委托中,进行一次注册。

配置 Web API 异常处理
GlobalConfiguration.Configure() 方法还可以用来配置 Web API 的异常处理机制,以便在发生异常时返回自定义的错误信息或异常对象。

例如,以下代码配置了一个自定义的异常处理器 MyExceptionHandler

public class Global : HttpApplication
{
    protected void Application_Start()
    {
        // 配置 Web API 异常处理
        GlobalConfiguration.Configure(config =>
        {
            config.Services.Replace(typeof(IExceptionHandler), new MyExceptionHandler());
        });
    }
}

在这个例子中,我们使用 config.Services.Replace 方法将默认的异常处理器替换为自定义的异常处理器 MyExceptionHandler

配置 Web API 消息处理器
GlobalConfiguration.Configure() 方法还可以用来配置 Web API 的消息处理器,以便在客户端请求和服务器响应时添加、修改或删除 HTTP 消息头部信息。

例如,以下代码配置了一个自定义的 HTTP 消息处理器 MyMessageHandler:

public class Global : HttpApplication
{
    protected void Application_Start()
    {
        // 配置 Web API 消息处理器
        GlobalConfiguration.Configure(config =>
        {
            config.MessageHandlers.Add(new MyMessageHandler());
        });
    }
}

在这个例子中,我们使用 config.MessageHandlers.Add 方法将自定义的 HTTP 消息处理器 MyMessageHandler 添加到 Web API 的消息处理器链中。

总之,GlobalConfiguration.Configure() 方法是 ASP.NET Web API 框架中一个非常重要的方法,它允许我们对 Web API 进行全局配置,以满足各种不同的需求。

AreaRegistration.RegisterAllAreas()作用

AreaRegistration.RegisterAllAreas()ASP.NET MVC 框架中一个静态方法,用于自动注册所有定义在当前应用程序中的区域(Area)

区域是 ASP.NET MVC 框架中一种组织代码的方式,它允许将相关联的控制器、视图和其他资源组织到一个独立的命名空间下,以便更好地管理应用程序的结构和功能。在一个 ASP.NET MVC 应用程序中,我们可以定义多个区域,并在每个区域中使用类似于默认区域的方式来组织代码。

AreaRegistration.RegisterAllAreas() 方法的作用就是扫描当前应用程序中的所有程序集,查找所有继承自 AreaRegistration 类的区域注册类,并逐个调用它们的 RegisterArea() 方法来完成区域的注册。这个过程是自动完成的,无需手动添加代码。

例如,在一个简单的 ASP.NET MVC 项目中,如果我们创建了一个名为 Admin 的区域,并定义了一个名为 HomeController 的控制器,那么我们只需要在 AdminAreaRegistration.cs 文件中编写如下代码:

public class AdminAreaRegistration : AreaRegistration
{
    public override string AreaName => "Admin";

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            name: "Admin_default",
            url: "Admin/{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

然后在 Global.asax.cs 文件中的 Application_Start() 方法中调用 AreaRegistration.RegisterAllAreas() 方法:

protected void Application_Start()
{
    // 注册所有区域
    AreaRegistration.RegisterAllAreas();
    
    // … 其他注册代码 
}

这样,我们就完成了 Admin 区域的自动注册,可以访问 http://localhost:port/Admin/Home 来访问 HomeControllerIndex 方法了。

总之,AreaRegistration.RegisterAllAreas() 方法是 ASP.NET MVC 框架中一个重要的辅助方法,用于简化区域的注册过程,提高应用程序的可维护性和可扩展性。

RouteConfig.RegisterRoutes(RouteTable.Routes)用法

RouteConfig.RegisterRoutes(RouteTable.Routes)ASP.NET MVC 项目中用于配置路由规则的方法。它通常被放置在 RouteConfig.cs 类文件中,通过调用 RouteTable.Routes 对象上的方法来注册路由规则。

ASP.NET MVC 中的路由规则指定了客户端如何访问控制器和操作方法。例如,我们可以使用路由规则将像 /Home/Index 或者 /Product/Detail/1 这样的 URL 映射到指定的控制器和操作方法上。

RouteConfig.RegisterRoutes(RouteTable.Routes) 的作用就是将路由规则添加到 ASP.NET MVC 应用程序中的路由表中。当客户端请求一个 URL 时,ASP.NET MVC 将检查路由表以决定哪个控制器和操作方法应该处理该请求。
以下是 RouteConfig.RegisterRoutes(RouteTable.Routes) 的用法示例:

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 = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

在这个例子中,我们定义了默认路由规则,它指定了 URL 的格式为 {controller}/{action}/{id},其中 controller 表示控制器名称,action 表示操作方法名称,id 表示一些可选的参数。我们还指定了默认的控制器和操作方法为 HomeIndex

然后我们在 Global.asax.cs 文件中的 Application_Start() 方法中调用 RouteConfig.RegisterRoutes(RouteTable.Routes) 来注册路由规则:

protected void Application_Start()
{
    // 注册路由规则 
    RouteConfig.RegisterRoutes(RouteTable.Routes);

    // … 其他注册代码
}

这样,在客户端请求一个 URL 时,ASP.NET MVC 框架将自动比对所有已注册的路由规则,并将该请求交给匹配的控制器和操作方法来处理。

总之,RouteConfig.RegisterRoutes(RouteTable.Routes) 方法是 ASP.NET MVC 框架中非常重要的一个方法,它用于配置路由规则,以实现控制器和操作方法的自动映射。

你可能感兴趣的:(asp.net,mvc,后端)