builder.Services.AddControllersWithViews

news/2025/1/7 18:18:33/文章来源:https://www.cnblogs.com/Dongmy/p/18655002

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/864891.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL语言做加减运算时将某项的null值转换为0

在SQL语言中,很多时候,在表项中会遇到null值,null值有三大特点:1)NULL值不参加统计;2)NULL值不进入计算表达式;3)不能与其它值进行比较。 因此,在运算中要将null值有时候转换成其他值,这里提供一种加减运算中转换为0的方法。 如:在算工资的时候,总工资=基础工资+奖…

中电金信携手华为发布“全链路实时营销解决方案”,重塑金融营销数智新生态

在数智化转型成为驱动经济社会高质量发展的新引擎背景下,“数智方案”栏目聚焦金融等国计民生重点行业场景,依托中电金信“源启筑基+咨询引领+应用重构”的产品及服务体系,输出市场洞察和行业解决方案、应用案例,旨在全面推动行业IT架构升级、数智化转型。数智驱动是金融机…

实时协作:如何通过协作文档提升团队生产力

在当今快节奏的工作环境中,团队协作的效率直接决定了项目的成败。然而,文档管理作为协作的核心环节,却常常成为效率的“隐形杀手”。无论是版本混乱、信息丢失,还是沟通不畅,这些问题都在无形中消耗着团队的时间和精力。而协作文档工具的出现,正是为了解决这些痛点,彻底…

win10重装如何跳过微软账号直接设置本地帐户.221111

​在添加你的帐户界面,选择脱机帐户2. 第二个页面,选择有限的体验3. 第三个页面,设置自己本地的用户名4. 第四个页面,设置自己本地的密码.zstitle { width: 280px; text-align: center; font-size: 26px } .zsimgweixin { width: 280px } .zsimgali { width: 280px; paddin…

看板软件在利益相关者期望管理中的应用与探索

制定一个有效的利益相关者期望管理计划需要全面识别利益相关者、深入分析他们的期望、制定期望管理策略、制定详细的期望管理计划、实施与调整期望管理计划以及建立绩效评估机制。通过这些步骤,你可以确保项目目标与利益相关者的期望保持一致,提高项目的成功率和满意度。制定…

centos7安装docker.240103

​1. installDocker.sh ,然后自行安装 安装所需资源包 sudo yum install -y yum-utils 设置docker下载地址 sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo安装docker sudo yum install docker-ce -y docker-ce-cli conta…

MySQL8设置root用户远程访问.240103

查询当前root状态,默认root的host是localhost use mysql; select user,host from user;update root的host为% update user set host = % where user =root;检查客户端windows 的防火墙,关闭防火墙try。.zstitle { width: 280px; text-align: center; font-size: 26px } .zsimg…

云计算真的很便宜吗?.240103

​37Signals的首席技术官David Heinemeier Hansson表示,2022年一共在AWS(亚马逊云)花了3,201,564美元,即每月266,797美元。其中759,983美元都花费在AWS的EC2和EKS服务服务计算上面。 Heinemeier指出,即使是这个账单,也是团队共同努力保持cost down的结果。“这已经是一个…

Kettle用查出来的数据自动创建表.240105

​Kettle在表输入的时候,写好很复杂的SQL,有种场景,就是想把这个很复杂的查出来的数据,自动创建一个表。 其实,操作步骤不复杂。 跟着我来做就是了。1,新建表输出,Shift按住,从表输入拖动箭头到表输出,打开表输出属性,指定数据库,输入需要创建的目标表名。2,点击右…

chrome浏览器调试窗口如何设置深色背景主题

前言 大家好,我是小徐啊。chrome浏览器是我们常用的浏览器,在开发Java应用的时候,是经常需要用到的。而且,开发的时候,需要经常打开浏览器的调试模式,这个界面的默认主题是白色的,其实也可以设置成深色的主题,今天,小徐就来介绍下如何设置深色主题。 如何设置深色主题…

FineReport取消强制分页和调整宽度的设置方法.240105

在decision里,找到管理系统-目录管理,打开相应挂载的报表,在参数设置里,添加以下内容: _bypagesize_ 字符串 false.zstitle { width: 280px; text-align: center; font-size: 26px } .zsimgweixin { width: 280px } .zsimgali { width: 280px; padding: 0px 0px 50px 0px …

openEuler欧拉使用sshpass不输入密码远程登录其他服务器.240108

​​ssh登陆不能在命令行中指定密码,sshpass 的出现则解决了这一问题。用 -p 参数指定明文密码,然后直接登录远程服务器,它支持密码从命令行、文件、环境变量中读取。 操作步骤: 一、关闭防火墙 systemctl stop firewalld systemctl disable firewalld 二、安装sshpass dnf…