简体   繁体   English

如何使我的代码更可重用于登录我的控制器

[英]How can I make my code more reusable for logging in my controllers

I am using same code for every controller.我为每个控制器使用相同的代码。 OnActionExecuting is called every time before action executed.每次执行操作之前都会调用 OnActionExecuting。 how can i refactor the given code?我如何重构给定的代码?

public class HomeController : Controller
    {

        private readonly ILogger<AccountController> logger;
        private string userId;
        private string path;

        public AccountController(
            ILogger<AccountController> logger)
        {
            this.logger = logger;
        }

        public override void OnActionExecuting(ActionExecutingContext context)
        {
            userId =  User.FindFirstValue(ClaimTypes.NameIdentifier) 
            path = $"{context.HttpContext.Request.Path.Value}[{context.HttpContext.Request.Method}]";
            logger.LogDebug($"{path} started. User(id): {userId}.");
        }
}

Example of how i am using it:我如何使用它的示例:

logger.LogInformation($"{path} Was approved for User(id) + {userId}.");

First, create a BaseController :首先,创建一个 BaseController :

public class BaseController : Controller
{

    private readonly ILogger<BaseController> logger;
    private string userId;
    private string path;

    public BaseController(IServiceProvider serviceProvider)
    {
        this.logger = serviceProvider.GetRequiredService<ILogger<BaseController>>();
    }

    public override void OnActionExecuting(ActionExecutingContext context)
    {
        userId =  User.FindFirstValue(ClaimTypes.NameIdentifier) 
        path = $"{context.HttpContext.Request.Path.Value}[{context.HttpContext.Request.Method}]";
        logger.LogDebug($"{path} started. User(id): {userId}.");
    }
}

Then, create HomeController然后,创建 HomeController

public class HomeController : BaseController
{
    public HomeController(IServiceProvider serviceProvider) : base(serviceProvider)
    { 
    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使我的控制台应用程序在不同数据库之间更可重用? - How can I make my console application more reusable across different databases? 如何使此Observable更可重用? - How can I make this Observable more reusable? 如何使我的程序与重复代码更有效? - How can I make my program with reoccurring code more effective? 如何使 razor 模板中的 html 助手更可重用? - How to make my html helpers in razor templates more reusable? 我怎样才能使这个 linq 查询更清晰、更可重用? - How can i make this linq query cleaner and more reusable? 如何使搜索/分页在应用程序中可重用? - how do I make searching/pagination reusable in my application? 如何在我的方法中传递泛型类,以便此代码可重用 - How can I pass a generic class in my method so that this code becomes reusable 如何合并WebAPI控制器中的所有“设置代码”? - How can I consolidate all of my “setup code” away from my WebAPI controllers? (C#) 我怎样才能使所有这些“else if”语句更简洁,我怎样才能更好地优化我的代码? - (C#) How can I make all these "else if" statements more condensed and how can I optimize my code better? 如何提高IsItAHoliday函数的效率? - How can I make my IsItAHoliday function more efficient?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM