C# 使用依赖项注入将令牌获取从startup.cs传递到HomeController.cs
我正在尝试从Startup.cs文件为以下代码创建DI。但是作为一个新加入.net的人,我很难想出一个解决方案C# 使用依赖项注入将令牌获取从startup.cs传递到HomeController.cs,c#,.net,asp.net-core,dependency-injection,asp.net-core-mvc,C#,.net,Asp.net Core,Dependency Injection,Asp.net Core Mvc,我正在尝试从Startup.cs文件为以下代码创建DI。但是作为一个新加入.net的人,我很难想出一个解决方案 var tokenAcquisition = context.HttpContext.RequestServices .GetRequiredService<ITokenAcquisition>() as ITokenAcquisition; var graphClient = GraphServiceClientFactory .GetAuthenti
var tokenAcquisition = context.HttpContext.RequestServices
.GetRequiredService<ITokenAcquisition>() as ITokenAcquisition;
var graphClient = GraphServiceClientFactory
.GetAuthenticatedGraphClient(async () =>
{
return await tokenAcquisition
.GetAccessTokenForUserAsync(GraphConstants.Scopes);
}
);
这可在以下网址找到:
通过电子邮件搜索示例查询用户。这就是我试图实现的功能
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var user = await graphClient.Users["carvalhostephen20@hotmail.com"]
.Request()
.GetAsync();
将Startup.cs代码复制到控制器中会导致解决方案失败并返回以下错误页面:
对不起,我第一次问错了你的问题。因此,基本上,在调用
服务时注册ITokenAcquisition
。AddWebAppCallsProtectedWebApi()
。尝试修改您的Homecontroller
。删除此行:
var tokenAcquisition = this.HttpContext.RequestServices
.GetRequiredService<ITokenAcquisition>() as ITokenAcquisition;
var-tokenAcquisition=this.HttpContext.RequestServices
.GetRequiredService()作为ITokenAcquisition;
然后改用这个实例:\u tokenAcquisition
我也遇到过几次“没有向AcquisiteTokenSilent传递帐户或登录提示”
在我的案例中,每次发生这种情况时,解决方案都会清除完整的浏览器历史记录(包括cookie)。我没有调查确切的原因,因为这个解决方案对我来说已经足够好了,但这似乎是由于浏览器缓存了一些令牌,在将某些内容更改为令牌获取代码后需要刷新这些令牌造成的。@lobster,瞬态对象总是新的。每次请求新对象时都会创建它们(通过DI请求实例)。如果我们想在web请求级别使用它,那么它应该是作用域生命周期(根据每个新请求而变化)。这里有更多信息-@SaiGummaluri感谢您的观察,但我指的是请求服务容器。这需要添加到startup.cs文件中,对吗?而不是以下行:
var tokenAcquisition=context.HttpContext.RequestServices.GetRequiredService()作为ITokenAcquisition
@lobstar参数部分中的sp一词是什么意思@lobstar@stephencarvalho您需要将此代码片段添加到startup.cs中,但不是相反sp
是IServiceProvider的一个实例,您可以使用它从服务容器获取另一个依赖项
GraphServiceClient graphClient = new GraphServiceClient( authProvider );
var user = await graphClient.Users["carvalhostephen20@hotmail.com"]
.Request()
.GetAsync();
var tokenAcquisition = this.HttpContext.RequestServices
.GetRequiredService<ITokenAcquisition>() as ITokenAcquisition;