ASP.NET 5 & MVC6强类型Routing教程:Lambda表达式解析

0 下载量 125 浏览量 更新于2024-08-31 收藏 73KB PDF 举报
"本文将深入探讨ASP.NET 5与MVC6中的基于Lambda表达式的强类型Routing实现,适合希望了解这一技术的开发者参考。" 在ASP.NET 5 和 MVC6 中,Routing是应用程序的重要组成部分,它负责将HTTP请求映射到相应的控制器和动作。在之前的版本中,我们通常通过字符串模板来定义路由规则。然而,ASP.NET 5 引入了一种新的、更安全的强类型Routing方式,即基于Lambda表达式。这种方式不仅提供了编译时的检查,还能减少因拼写错误或类型不匹配而导致的运行时错误。 在Lambda表达式的强类型Routing实现中,我们不再需要直接使用字符串来指定控制器和动作名称,而是使用Lambda表达式来声明。例如: ```csharp services.Configure<MvcOptions>(opt => { opt.EnableTypedRouting(); opt.GetRoute("homepage", c => c.Action<ProductsController>(x => x.Index())); opt.GetRoute("aboutpage/{name}", c => c.Action<ProductsController>(x => x.About(Param<string>.Any))); opt.PostRoute("sendcontact", c => c.Action<ProductsController>(x => x.Contact())); }); ``` 在上面的代码中,`opt.GetRoute` 和 `opt.PostRoute` 是用于定义HTTP GET和POST请求的路由。Lambda表达式如 `c => c.Action<ProductsController>(x => x.Index())` 用来指明要调用的控制器和动作。这里的 `c` 和 `x` 是上下文对象,它们允许我们在运行时获取和设置路由参数。 实现这一功能的关键在于,Lambda表达式不是实际执行Action方法,而是用于获取Action方法的`MethodInfo`。这样,编译器就能在编译阶段检查控制器和动作是否存在,从而提供更强的类型安全性。 为了启用这种强类型Routing,我们需要在`Startup.cs`的`ConfigureServices`方法中配置`MvcOptions`,并开启`EnableTypedRouting`。同时,`MvcOptions`中的`ApplicationModelConventions`属性是一个列表,用于保存实现了`IApplicationModelConvention`接口的对象。这些对象会在MVC应用启动时被调用,对程序模型进行处理,包括应用路由规则。 `IApplicationModelConvention`接口提供了对MVC程序模型进行自定义的机会。开发者可以实现这个接口,创建自己的路由规约,以便在应用启动时自动应用强类型路由规则。这使得开发者能够以更加灵活和可扩展的方式管理路由配置。 基于Lambda表达式的强类型Routing在ASP.NET 5 和 MVC6 中提供了一种更安全、更易于维护的路由定义方式。它减少了开发过程中的潜在错误,并提高了代码的可读性和可维护性。对于大型项目和团队协作来说,这种强类型化的方法尤其有价值,因为它能够在早期捕获路由相关的错误,而不是等到部署后才发现。