You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ABP 3.3.1如何自动填充实体的DeleterId/CreatorId/LastModifierId字段?

解决方案

前端(Ionic/Angular)实现

  • 编写HTTP拦截器,统一给所有API请求的URL追加用户ID查询参数,无需逐个修改API调用:
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable()
export class UserIdInterceptor implements HttpInterceptor {
  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    // 从本地存储或认证服务获取当前用户ID
    const userId = localStorage.getItem('currentUserId');
    if (userId) {
      // 克隆请求并拼接查询参数
      const separator = request.url.includes('?') ? '&' : '?';
      const modifiedRequest = request.clone({
        url: `${request.url}${separator}userId=${userId}`
      });
      return next.handle(modifiedRequest);
    }
    return next.handle(request);
  }
}
  • 在Angular模块中注册该拦截器:
import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { UserIdInterceptor } from './interceptors/user-id.interceptor';

@NgModule({
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: UserIdInterceptor,
      multi: true
    }
  ]
})
export class AppModule { }

后端(ABP + C#)配置

  • 自定义请求中间件,从URL查询参数提取用户ID并注入ABP当前用户上下文:
using Microsoft.AspNetCore.Http;
using Volo.Abp.Users;

public class UserIdSetterMiddleware
{
    private readonly RequestDelegate _next;

    public UserIdSetterMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context, ICurrentUserAccessor currentUserAccessor)
    {
        if (context.Request.Query.TryGetValue("userId", out var userIdValue) && 
            Guid.TryParse(userIdValue, out var userId))
        {
            // 将提取到的ID设置到当前用户上下文,供ABP自动填充字段使用
            ((CurrentUser)currentUserAccessor.CurrentUser).SetId(userId);
        }

        await _next(context);
    }
}

// 在Program.cs中注册中间件(需放在ABP相关中间件之后)
app.UseMiddleware<UserIdSetterMiddleware>();
  • 确保实体继承ABP审计基类:你的实体需继承FullAuditedEntity<Guid>或AuditedEntity<Guid>,ABP会自动从当前用户上下文读取ID,填充CreatorId、LastModifierId、DeleterId字段。

注意事项

  • 生产环境必须对前端传递的用户ID做合法性校验,比如结合JWT令牌验证身份,防止恶意伪造ID。
  • 建议使用HTTPS协议,保障参数传递的安全性。

内容的提问来源于stack exchange,提问作者Giorgio Faccioli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:50:31