Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将连接字符串传递给asp.net核心中的自定义属性_C#_Asp.net_Asp.net Mvc_Asp.net Core - Fatal编程技术网

C# 将连接字符串传递给asp.net核心中的自定义属性

C# 将连接字符串传递给asp.net核心中的自定义属性,c#,asp.net,asp.net-mvc,asp.net-core,C#,Asp.net,Asp.net Mvc,Asp.net Core,我正在将AuthorizationFilterAttribute从asp.net web api迁移到asp.net核心web api 下面的KeywordAuthorizationAttribute位于我的asp.net核心属性代码中 public class KeywordAuthorizationAttribute : AuthorizeAttribute, IAuthorizationFilter { public void OnAuthorization(

我正在将
AuthorizationFilterAttribute
从asp.net web api迁移到asp.net核心web api

下面的
KeywordAuthorizationAttribute
位于我的asp.net核心属性代码中

 public class KeywordAuthorizationAttribute : AuthorizeAttribute, IAuthorizationFilter 
    {

        public void OnAuthorization(AuthorizationFilterContext context)
        {
            var user = context.HttpContext.User;

            if (user.Identity.IsAuthenticated)
            {
                SQLDataAccess sqlDataAccess = new SQLDataAccess(**passedConnectionStringFrom_appsettings.json**);
                var username = context.HttpContext.User.Identity.Name.Substring
                    (context.HttpContext.User.Identity.Name.LastIndexOf(@"\") + 1);


                if (!sqlDataAccess.IsUserAllowed((string)context.RouteData.Values["Controller"], username))
                {
                    context.Result = new StatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);
                    return;
                }
            }
            else
            {
                context.Result = new StatusCodeResult((int)System.Net.HttpStatusCode.Unauthorized);
                return;

            }
        }
    }
关键字authorizationAttribute的示例
-如果控制器或控制器操作使用此authorizationAttribute修饰,则它将使用用户名并检查该控制器从数据库的访问权限

        [Authorize]
        [HttpGet]
        [KeywordAuthorization]
        public IActionResult Get()
        {
            return Ok();
        }
我的问题是如何将连接字符串传递到
关键字authorizationAttribute
? 我已经在appsettings.json中设置了连接字符串

{
  "ConnectionStrings": {
    "EmployeeDBConnection": "server=(localdb)\\MSSQLLocalDB;database=EmployeeDB;Trusted_Connection=true"
  }
}

使用传递到OnAuthorization方法的上下文参数中的
AuthorizationFilterContext.HttpContext.RequestServices.GetService
方法:

        public void OnAuthorization(AuthorizationFilterContext context)
        {
            ...

            if (user.Identity.IsAuthenticated)
            {
                var connectionString = context.HttpContext.RequestServices
                    .GetService(typeof(IConfiguration))
                    .GetConnectionString("EmployeeDBConnection");
               // GetConnectionString is an extension method, so add
               // using Microsoft.Extensions.Configuration

               ...
            }
        }

使用此技术,您也可以简单地使用
DbContext

您将需要使用类似Startup.cs中的扩展进行配置,并且您可以通过以下方式获得连接字符串:

Configuration.GetConnectionString("EmployeeDBConnection");

这很有效,非常感谢,我只需要再加一个括号。((IConfiguration)context.HttpContext.RequestServices.GetService(typeof(IConfiguration)).GetConnectionString(“Employeedbconction”);您还可以演示如何使用DbContext吗?