首页 > 其他分享 >builder.Services.AddControllersWithViews

builder.Services.AddControllersWithViews

时间:2025-01-06 12:14:51浏览次数:8  
标签:builder 视图 options AddControllersWithViews Add Filters Services new 过滤器

在 ASP.NET Core 中,builder.Services.AddControllersWithViews 是一个用于配置应用程序以支持 MVC(Model-View-Controller)模式的扩展方法。它通常在应用程序的启动配置文件中使用,例如 Program.csStartup.cs。这个方法的作用是注册 MVC 控制器和视图所需的依赖项和服务。

在 ASP.NET Core 中,使用 builder.Services.AddControllersWithViews(options => {...}) 方法配置 MVC 控制器和视图时,可以通过 options.Filters.Add 添加全局过滤器。过滤器是 ASP.NET Core MVC 中用于在请求处理管道的特定阶段执行代码的组件。它们可以用于执行诸如日志记录、异常处理、授权检查等跨多个控制器和操作的通用逻辑。

以下是一些常见的过滤器类型和如何添加它们的示例:

常见过滤器类型

  1. 授权过滤器(Authorization Filters):用于检查用户是否具有执行特定操作的权限。

    csharp
    options.Filters.Add(new AuthorizeAttribute());
  2. 异常过滤器(Exception Filters):用于捕获并处理操作执行过程中发生的异常。

    csharp
    options.Filters.Add(new ExceptionFilterAttribute());
  3. 操作过滤器(Action Filters):在操作执行前后执行代码。

    csharp
    options.Filters.Add(new MyActionFilter());
  4. 结果过滤器(Result Filters):在操作结果生成前后执行代码。

    csharp
    options.Filters.Add(new MyResultFilter());

示例代码

以下是一个完整的示例,展示如何在 Program.cs 中配置全局过滤器:

csharp
var builder = WebApplication.CreateBuilder(args);

// 添加控制器和视图支持,并配置全局过滤器
builder.Services.AddControllersWithViews(options =>
{
    // 添加全局授权过滤器
    options.Filters.Add(new AuthorizeAttribute());

    // 添加自定义操作过滤器
    options.Filters.Add(new MyActionFilter());

    // 添加异常过滤器
    options.Filters.Add(new ExceptionFilterAttribute());
});

var app = builder.Build();

// 配置中间件管道
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

app.Run();

// 自定义操作过滤器示例
public class MyActionFilter : IActionFilter
{
    public void OnActionExecuting(ActionExecutingContext context)
    {
        // 在操作执行前执行的代码
        Console.WriteLine("Action is about to execute.");
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
        // 在操作执行后执行的代码
        Console.WriteLine("Action has been executed.");
    }
}

解释

  • AuthorizeAttribute:这是一个内置的授权过滤器,用于要求用户必须经过身份验证才能访问控制器或操作.
  • MyActionFilter:这是一个自定义的操作过滤器,实现了 IActionFilter 接口。它在操作执行前后分别输出日志信息.
  • ExceptionFilterAttribute:这是一个内置的异常过滤器,用于捕获和处理操作执行过程中发生的异常.

通过在 AddControllersWithViews 方法中添加全局过滤器,你可以确保所有控制器和操作都会执行这些过滤器中的逻辑,从而实现代码的复用和统一的处理逻辑.

 

1. AddControllersWithViews(options => {...})

  • 作用:配置 MVC 控制器和视图支持。
  • AutoValidateAntiforgeryTokenAttribute:这是一个过滤器,用于自动验证 POST 请求中的防伪造令牌。防伪造令牌用于防止跨站请求伪造(CSRF)攻击,确保只有来自同一站点的请求才能被处理。
  • AddSessionStateTempDataProvider:此方法用于配置临时数据提供者,以便在使用 TempData 时使用会话状态来存储数据。这对于跨请求存储少量数据非常有用。
  • AddRazorRuntimeCompilation:启用 Razor 视图的运行时编译。这意味着在应用程序运行时对视图文件的更改将立即生效,而无需重新编译整个应用程序。这对于开发阶段非常有用,但在生产环境中可能会增加性能开销。通常需要在项目文件中进行相应的配置,例如设置 RazorCompileOnBuild 为 false 以确保在开发时启用运行时编译。

2. AddRazorPages()

  • 作用:配置 Razor Pages 支持。
  • Razor Pages:这是一种页面模型,用于构建简单的页面,适合不需要复杂控制器逻辑的场景。它将页面的逻辑和视图紧密集成在一起,简化了页面的开发过程。

    注意事项

    • 性能考虑:启用运行时编译(AddRazorRuntimeCompilation)会增加应用程序的启动时间和运行时开销,因此在生产环境中通常不推荐使用。可以通过在项目文件中配置来控制其行为.
    • 安全性:使用 AutoValidateAntiforgeryTokenAttribute 是一个很好的安全实践,确保 POST 请求的安全性.
    • 会话状态:使用会话状态存储 TempData 时,需要注意会话的生命周期和性能影响,尤其是在高并发的应用场景中.

标签:builder,视图,options,AddControllersWithViews,Add,Filters,Services,new,过滤器
From: https://www.cnblogs.com/Dongmy/p/18655002

相关文章

  • 复杂对象的创建与组装 - 建造者模式(Builder Pattern)
    建造者模式(BuilderPattern)建造者模式(BuilderPattern)建造者模式(BuilderPattern)概述建造者模式结构图代码talkischeap,showyoumycode总结建造者模式(BuilderPattern)建造者模式(BuilderPattern)是一种创建型设计模式,它允许你分步骤构建复杂对象。该模式将一个......
  • uniapp(Hbuilderx)
    目录微信开发者工具下载新建项目运行微信开发者工具下载新建项目注意点如果要打包安卓,需要勾上:运行微信小程序1:找到.exe路径,粘贴进去2:打开微信小程序“服务端口”......
  • uniapp - 解决安卓APP运行到真机显示未检测到手机或模拟器,HBuilderX真机调试未检测到
    前言关于此问题网上的教程都无法解决,如果您的情况与我相似,即可解决。在uniappApp项目开发中,解决开发app运行到真机时显示“没有检查到设备”将项目运行到Android手机真机调试却检测不到,实际上已经插上USB数据线了,也开启进入了开发者模式怎么调也识别不到,非常恶心的......
  • 【科技前沿】零代码构建台风监测大屏:Experience Builder赋能风云气象卫星(FY-4A)应用
    本教程首发于极思课堂,极思课堂(极思课堂-GeoSceneOnline)是易智瑞信息技术有限公司面向公司客户、合作伙伴、GIS从业者、高校教师与学生以及热衷于GIS技术的极客们打造的一站式GIS前沿技术学习平台。欢迎大家访问、学习与关注。课程原文链接:极思课堂-GeoSceneOnlinehttp......
  • 从0开始学uniapp——认识HBuilderX
    为什么使用uniapp:可以多端运行,写好了这一套可以用在h5,安卓程序,小程序多端,很方便。 1.百度搜HBuilderX,使用该编译器学习uniapp2.新建一个默认项目pages——用于存放页面,这里都是.vue后缀的页面,pages.json——用于存放路由pages数组里按例子添加即可, HBuilderX提供一个很方......
  • 已解决Cannot find cache named ‘XXX‘ for Builder
    已解决Cannotfindcachenamed‘XXX‘forBuilder|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|----......
  • 10. String、StringBuffer和StrIngBuilder的区别是什么?
    String是只读字符串,它并不是基本数据类型,而是一个对象。从底层源码来看是一个final类型的字符数组,所引用的字符串不能被改变,一经定义,无法再增删改。每次对String的操作都会生成新的String对象。privatefinalcharvalue[];每次+操作:隐式在堆上new一个跟原字符串相同的StringBui......
  • 反微服务架构(A Macro Services Framework)
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯反微服务架构(AMacroServicesFramework)本文提出了一种新的设想和概念:反微服务架构(AMacroServicesFramework)。与当前流行的微服务架构不同,在考虑后端面临......
  • 你有使用过HBuilder吗?你喜欢它还是vs code?为什么?
    HBuilder和VSCode都是流行的前端开发环境,它们各自有自己的特点和优势。以下是对两者的简要比较和个人观点:HBuilder:集成性:HBuilder是一个更为集成的开发环境,特别是对于使用DCloud(数字天堂)相关技术和框架(如uni-app)的开发者来说,它提供了很多内置的工具和功能,可以大大简化开发流程......
  • java--代码段--String--构建字符串StringBuilder
    str="/u1D56B";StringBuilderbuilder=newStringBuilder();//首先构建一个空的字符串构建器charch=58;builder.append(ch);//当每次需要添加一部分内容时,就调用append方法。builder.append(str);StringcompletedString=builder.toString();//在需要构建字符串......