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吗?