ABP官方文档(三十三)【MVC Controllers】

ABP多租户实战:从伪隔离到全链路租户上下文 多租户架构是SaaS系统的核心能力,其本质并非简单的数据字段过滤,而是贯穿请求解析、数据库路由、缓存分片、后台任务与分布式追踪的全链路隔离机制。在.NET生态中,ABP框架虽提供多租户基础组件,但需深度定制租户识别策略(如域名/Headr解析)、独立Schema动态DbContext、租户感知的Hangfire任务调度及带前缀的Redis缓存Key生成等关键环节。尤其需厘清多租户与RBAC权限模型的本质区别:前者解决数据与运行时空间隔离,后者解决操作行为授权。本文聚焦ABP v7.4源码级实践,覆盖共享库+ 阅读详情

6.1 ABP表现层 - Mvc Controllers

6.1.1 简介

ABP已经把 ASP.NET MVC Controllers 集成到了 Abp.Web.Mvc 中,正如你一直那样做的,你可以使用常规的MVC Controllers。
依赖注入可以解析常规的MVC Controllers。

但是你的Controllers应该从 AbpController 派生,因为在该基类中ABP已经提供了一些有用的便利方法。

6.1.2 AbpController 基类

下面是一个简单的派生自AbpApiController的示例代码:

public class HomeController : AbpController
{
    public ActionResult Index()
    {
        return View();
    }
}
1. 本地化

为了使本地化更简单,ABP在AbpController中定义了一个 L 方法。示例如下:

public class HomeController : AbpController
{
    public HomeController()
    {
        LocalizationSourceName = "MySourceName";
    }

    public ActionResult Index()
    {
        var helloWorldText = L("HelloWorld");

        return View();
    }
}

为了能够使用 L 方法,首先我们应该初始化 LocalizationSourceName。当然,为了不重复初始化该变量,我们可以定义一个继承自AbpController的基类,在该类中初始化它,以后所有的Controller类都继承自该基类。

2. 异常处理

异常是自动被处理的,会被记录到日志并且以一个适当的方式返回到客户端。详情请参考异常处理。

3. 包装返回内容

如果返回的类型是 JsonResult (或者异步Action的Task)ABP默认会将Action的返回内容进行包装。你可以改变这个,只要在Controller的Action上面使用特性:WrapResult 或者 DontWrapResult,详情请参考Javascript函数库

4. 审计日志

如果派生自AbpController,那么日志会被自动记录。详情请参考审计日志。

5. 权限认证

你可以用 AbpMvcAuthorize 特性来阻止未授权的用户来访问你的Controllers和Actions。
示例如下:

public class HomeController : AbpController
{
    [AbpMvcAuthorize("MyPermissionName")]
    public ActionResult Index()
    {
        return View();
    }
}

AbpController也定义了一个快速检测权限的方法 IsGranted。
详情请参照权限认证。

6. 工作单元

MVC Action默认是没有开启工作单元模式的。如果需要开启工作单元,你需要在Action上添加 UnitOfWork 的特性,如下所示:

public class HomeController : AbpController
{
    private readonly IRepository<User, long> _userRepository;

    public HomeController(IRepository<User, long> userRepository)
    {
        _userRepository = userRepository;
    }

    [UnitOfWork]
    public virtual ActionResult Users(string filter)
    {
        var users = _userRepository
            .GetAll()
            .Where(u => u.UserName.StartsWith(filter))
            .ToList();

        return View(users);
    }
}

由于仓储的 GetAll() 方法返回的是 IQuerable 类型,在调用 ToList() 方法的时候需要连接数据库(这是由于IQuerable的延迟执行特性所决定的)。

注意:使用 UnitOfWork 特性的方法,该方法必须是virtual的,否则拦截器将不能使用。

详情请参照工作单元。

6.1.3 其他

你也可以(pre-inijected)预先注入 AbpSession, EventBus, PermissionManager, PermissionChecker, SettingManager, FeatureManager, FeatureChecker, LocalizationManager, Logger, CurrentUnitOfWork 等基础属性。

MIKE11实战:平原河网水动力建模从入门到精通(附GIS数据处理技巧) 本文系统介绍了MIKE11软件在平原河网水动力建模中的完整实战流程。从GIS数据预处理、河网构建、参数率定到结果分析,详细阐述了构建可靠数字孪生模型的关键步骤与技巧,旨在帮助水利工程师高效解决平原地区复杂水流模拟的挑战,为防洪决策提供科学依据。 阅读详情

相关推荐

WhatsApp网页版扫码分析

扫码登录本质上是WhatsApp的多设备登录,设备之间可以独立运行,那么当我们首次通过WhatsApp扫码登录二维码时,到底发生了那些事情?交换了那些数据?

SocialMarketing的博客 5230

ABP框架系列之三十五:(MVC-Controllers-MVC控制器)

Introduction ASP.NET Boilerplate is integrated to ASP.NET MVC Controllers via Abp.Web.Mvc nuget package. You can create regular MVC Controllers as you always do. Dependency Injection properly works...

weixin_34126557的博客 900

Figma入门-自动布局

Figma原型图制作内置组件友好,自动布局类似CSS flex,通过布局网格控制对齐、分布、换行等,前端熟悉的同学易上手,参数设置基本一致。

我码玄黄的博客 2175

ABP源码分析三十四:ABP.Web.Mvc

ABP.Web.Mvc模块主要完成两个任务: 第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用。 第二,一些常见的基础功能的实现。   AbpController:这是一个抽象基类,继承自MVC Controller,是ABP系统中所有controller的基类。如下图中,其封装了ABP核心模块中提供的大多数...

weixin_34068198的博客 293

STM32CubeMX+Keil5实战:手把手教你用STM32F103C8T6开发扫地机器人(附完整代码)

本文详细介绍了如何使用STM32F103C8T6开发智能扫地机器人,从STM32CubeMX配置到Keil5代码实现的全过程。涵盖硬件选型、时钟树配置、GPIO外设设置、电机驱动、超声波测距及自动避障算法等核心内容,并提供完整代码示例,助力开发者快速掌握智能硬件开发技巧。

weixin_30329623的博客 81

ABP源码分析二:ABP中配置的注册和初始化

一般来说,ASP.NET Web应用程序的第一个执行的方法是Global.asax下定义的Start方法。执行这个方法前HttpApplication 实例必须存在,也就是说其构造函数的执行必然是完成了。 ABP开始的地方就是HttpApplication的构造函数。 如下图一,Abp定义了一个继承自HttpApplication的类AbpApplication。该类的构造函数里会创建AbpBoo...

weixin_34242658的博客 261

银河麒麟操作系统最佳实践专栏介绍

本专栏聚焦国产银河麒麟操作系统(桌面版/服务器版)的实战应用,提供系统安装、配置优化、应用部署、故障排查等实用指南。内容基于真实操作场景,涵盖Linux通用技术(如RAID配置、环境变量管理)、服务器系统专项(如数据库迁移、驱动安装、安全加固)及桌面系统技巧(如PXE安装、镜像封装)。面向IT运维、开发者和国产化转型人员,突出实战性和差异化,帮助用户规避常见问题,提升系统管理效率。所有教程均配有详细步骤和截图,确保可操作性,并持续更新适配新版系统。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 532

ABP继承自AbpController后路由无效

现象:ABP中,自定义了一个继承自AbpController后路由无效,直接继承Controller就可以正确使用控制器。 解决方案:保证你的控制器是抽象的,如下 public abstract class MyBaseController:AbpController { } 参考:Creating a base class to inherit from AbpController routing is invalid https://github.com/abpframewo...

dacong的专栏 1191

UI自动化控制PC端微信获取当前群聊的群友列表

在一个月前,某个群友在获取整个群的群友信息时遇到了一点问题: 对整个群进行群友数据获取经测试确实有点棘手,下面我将我的解决过程公布给大家。 基础教程详见: https://blog.csdn.net/as604049322/article/details/121391639 人工打开要抓取的群聊窗口后,首先获取微信窗口并点击聊天信息按钮: import uiautomation as auto auto.uiautomation.SetGlobalSearchTimeout(1) wechatWind

小小明-代码实体的专栏 3万+

SOME/IP协议详解「1.0·概述」

主要讲解什么是someip,

雪云飞星的博客 5367

ABP官方文档(三十四)【MVC视图,本地化】

6.2 ABP表现层 - Mvc视图6.2.1 简介在 Abp.Web.Mvc 中,ABP集成了MVC视图。你可以像往常一样创建常规的MVC视图。6.2.2 AbpWebViewPage 基类ABP定义了一个AbpWebViewPage基类,在该类中定义了一些有用的属性和方法。如果你使用startup templates来创建项目,那么你的视图会自动的继承该基类。AbpWebViewPage 定义了

极客神殿 3208

【雷达成像】基于matlab SAR雷达成像仿真【含Matlab源码 3750期】

SAR雷达成像仿真 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 1084

ASP.NET Boilerplate 异常处理机制全解析:从 MVC 错误页到 AJAX 错误响应

ASP.NET Boilerplate(ABP)为 ASP.NET MVC 与 Web API 应用提供了一套**全自动的统一异常处理基础设施**:无论异常发生在普通 HTTP 请求还是 AJAX 请求中,框架都会自动捕获、记录日志,并向客户端返回格式化的错误响应,你几乎不需要在任何 Controller Action 里编写 try/catch。本文将以 [Handling-Exceptions

gitblog_00610的博客 427

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ASP.NET Boilerplate 集成 OpenIddict 完整指南:在 ABP ZeroCore 中搭建 OpenID Connect 认证服务

本篇技术指南围绕 ASP.NET Boilerplate(ABP)ZeroCore 框架与 OpenIddict 的官方集成方案展开,讲解如何在一个基于 ABP 启动模板(含 Module Zero)的 ASP.NET Core 项目中,通过三个官方 NuGet 包快速搭建完整的 OpenID Connect 服务端:包括 OAuth 2.0 / OpenID Connect 的授权码、密码、客户

gitblog_00818的博客 873

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ASP.NET Boilerplate 中的 XSRF/CSRF 防护:从框架自动化到源码级实现解析

跨站请求伪造(CSRF/XSRF)是 Web 应用最经典的安全威胁之一:当用户已在可信站点完成登录,恶意网站、邮件或程序可以诱导浏览器代表该用户向可信站点发送非预期请求。ASP.NET Boilerplate(ABP)框架将 CSRF 防护"尽可能简化与自动化":它内建了适用于 **ASP.NET MVC 5.x、ASP.NET Web API 与 ASP.NET Core** 三套平台的防伪(A

gitblog_00307的博客 435

ASP.NET Boilerplate NuGet 包全景指南:官方包清单、依赖关系与安装实践

ASP.NET Boilerplate(ABP)以 **NuGet** 为主要分发渠道,所有官方功能都拆分为一个个职责单一、可独立引用的程序包(package),从最核心的 `Abp` 内核到 ASP.NET Core、ORM、缓存、邮件、后台任务等各类集成层,开发者可按需组合。本文以官方 [Nuget-Packages.md](https://link.gitcode.com/i/5cfad87

gitblog_00360的博客 255

ASP.NET Boilerplate 插件(PlugIn)开发实战:以 DatabaseMaintainer 插件定时清理审计日志

本篇技术指南以 ASP.NET Boilerplate(ABP)框架的插件机制为核心,完整演示如何从零创建一个名为 `DatabaseMaintainer` 的插件类库:通过继承 `AbpModule` 定义插件模块、借助 `PeriodicBackgroundWorkerBase` 实现定时清理审计日志的后台工作器,并将其动态加载进 ASP.NET Core 应用(`Startup.cs` 中通

gitblog_00568的博客 429

ASP.NET Boilerplate 嵌入资源(Embedded Resource Files)完全指南:插件化 Razor 视图与静态资源实战

ASP.NET Boilerplate(ABP)为 Web 应用提供了一套开箱即用的**嵌入资源**机制:将 Razor 视图(.cshtml)以及 css、js、img 等静态资源直接编译进程序集,再通过统一的嵌入资源管理器暴露给 Web 前端。本文将以官方文档 [Embedded-Resource-Files.md](https://link.gitcode.com/i/4a14d30f8c7

gitblog_01159的博客 365

ASP.NET Boilerplate 模块系统(Module System)完全指南:模块定义、依赖、生命周期与插件机制

ASP.NET Boilerplate(ABP)通过内置的模块化基础设施,将应用程序拆分为可独立开发、可复用、可组合的模块,并以"依赖 + 生命周期"的方式在启动与关闭时统一编排。本文以仓库内 [Module-System.md](https://link.gitcode.com/i/c21c82664cb98a84112117bd9594a00d) 为主体,结合 [AbpModule.cs](h

gitblog_00540的博客 1041

ASP.NET Boilerplate 会话管理实战指南:深入 IAbpSession 接口与 ClaimsAbpSession 实现原理

ASP.NET Boilerplate(ABP)通过 `IAbpSession` 接口为开发者提供一种**独立于 ASP.NET Session** 的方式来获取当前登录用户与租户信息,该接口已被 ABP 自身的设置(Setting)、授权(Authorization)、审计日志(Audit Logging)等基础设施深度集成。本文将以 [doc/WebSite/Abp-Session.md](h

gitblog_00852的博客 712

ASP.NET Boilerplate 实体历史(Entity History)追踪系统:配置、审计存储与快照还原实战指南

本指南围绕 ASP.NET Boilerplate(ABP)框架的 **Entity History(实体历史)** 追踪系统展开,系统讲解如何自动记录实体的增删改(Added/Modified/Deleted)与属性级变更,并支持多租户隔离、变更原因(Reason)标记与历史快照还原。读完本文,你将掌握:在模块的 `PreInitialize` 方法中通过 `Configuration.Enti

gitblog_00696的博客 408

[转]【无私分享:ASP.NET CORE 项目实战(第九章)】创建区域Areas,添加TagHelper...

本文转自:http://www.cnblogs.com/zhangxiaolei521/p/5808417.html 目录索引    【无私分享:ASP.NET CORE 项目实战】目录索引   简介        在Asp.net Core VS2015中,我们发现还有很多不太简便的地方,比如右击添加视图,转到试图页等功能图不见了,虽然我们可以通过工具栏的自定义命令,把这...

weixin_34344403的博客 109

ASP.NET Boilerplate 动态 Web API 全面指南:从应用服务到 REST 接口与 JavaScript 代理

本文是 ASP.NET Boilerplate(ABP)框架中"动态 Web API(Dynamic Web API)"机制的完整技术指南。它讲解了如何通过一行配置把应用服务(Application Service)自动暴露为 Web API 控制器、如何批量注册与精细定制 HTTP 动词、如何利用动态 JavaScript 代理与 AngularJS 集成,以及结果包装(Result Wrapp

gitblog_00836的博客 195

ASP.NET Boilerplate N 层架构解析:基于传统分层架构与领域驱动设计的现代化多层应用模型

本篇技术指南围绕 ASP.NET Boilerplate 官方文档 [NLayer-Architecture.md](https://link.gitcode.com/i/92b3f87fd10e5e618c37ac0cf0e47e3c) 展开,系统讲解该框架如何在**传统 N 层架构**与**领域驱动设计(DDD)**的基础上,为现代 Web 应用规划出"客户端应用、表现层、分布式服务层、应用层

gitblog_00795的博客 57

AngularJS实战项目(Ⅰ)--含源码

前言 钻研ABP框架的日子,遇到了很多新的知识,因为对自己而言是新知识,所以经常卡在很多地方,迟迟不能有所突破,作为一个稍有上进心的程序员,内心绝对是不服输的,也绝对是不畏困难的,心底必然有这样一股力量“I must conquer it!”。比如,以前没用过AutoMapper,那我就去学,最后将学到的写成了博客,和大家一起分享,争取让那些还没接触的人少走弯路。现在,在前端设计时,ABP很...

weixin_30906425的博客 95
上一篇: ABP官方文档(三十二)【集成Swagger UI】
下一篇: ABP官方文档(三十四)【MVC视图,本地化】
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值