C# 如何从blazor中的.cs文件访问浏览器本地存储?
首先,我可以访问.razor页面中的本地存储数据。我的意思是我无法访问.cs文件中的本地存储数据。我如何访问 _进口剃须刀:C# 如何从blazor中的.cs文件访问浏览器本地存储?,c#,browser,local-storage,blazor,blazor-server-side,C#,Browser,Local Storage,Blazor,Blazor Server Side,首先,我可以访问.razor页面中的本地存储数据。我的意思是我无法访问.cs文件中的本地存储数据。我如何访问 _进口剃须刀: @using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage; @inject ProtectedLocalStorage protectedLocalStorage 任何人。razor文件: await protectedLocalStorage.SetAsync(key, JsonSeri
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage;
@inject ProtectedLocalStorage protectedLocalStorage
任何人。razor文件:
await protectedLocalStorage.SetAsync(key, JsonSerializer.Serialize(instance));
上面的代码适合我,但我想从.cs文件中另外调用protectedLocalStorage
对不起,语法错误
编辑:
我正在startup.cs中使用IHttpClientFactory,我想在api请求之前添加令牌作为标头
startup.cs
services.AddHttpClient("api", hc =>
{
hc.BaseAddress = new Uri("http://localhost:5000/");
string tokenVal = tokenService.GetToken();
if (!String.IsNullOrEmpty(tokenVal))
hc.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenVal);
});
我想从这个.cs文件的本地存储中获取令牌值
public class TokenService : ITokenService
{
private IHttpContextAccessor httpContextAccessor;
public TokenService(IHttpContextAccessor HttpContextAccessor, IProtected) => httpContextAccessor = HttpContextAccessor;
public string GetToken()
{
return "";
}
}
如何从blazor中的.cs文件访问浏览器本地存储
ASP.NET在大多数构造函数中支持注入。扩展OP的示例:
//Startup.cs->ConfigureServicesServiceCollection服务
//在您的情况下可能不需要,但要彻底了解:
services.AddScoped;
//SomeFile.cs
公共类令牌服务:ITokenService
{
//暂时忽略在同一上下文中使用这些
专用IHttpContextAccessor httpContextAccessor;
私有只读受保护的BrowserStorage\u存储;
//注入可以在ASP.NET中进行
公共代币服务
IHttpContextAccessor HttpContextAccessor,
受保护的浏览器存储
{
httpContextAccessor=httpContextAccessor;
//注入工作,但PBS服务可能不工作:见下文
_储存=储存;
}
//..
}
但是,我不建议将其用于ProtectedBrowser存储,因为它在引擎盖下使用IJSRuntime。如果您尝试在非javascript感知的上下文中使用此选项,例如在启动期间。配置客户端仍在等待响应且无法执行javascript的位置,您将遇到错误。在Blazor中,ProtectedBrowserStorage只能直接或间接地从Blazor组件调用;为了保持简单,可以将其封装在只用于组件的类中,或者将其保存在组件本身中
因此,如果您试图这样做:
我正在startup.cs中使用IHttpClientFactory,我想在api请求之前添加令牌作为标头
ProtectedBrowserStorage不是适合您的工具。使用cookie或其他web服务器技术
如何从blazor中的.cs文件访问浏览器本地存储
ASP.NET在大多数构造函数中支持注入。扩展OP的示例:
//Startup.cs->ConfigureServicesServiceCollection服务
//在您的情况下可能不需要,但要彻底了解:
services.AddScoped;
//SomeFile.cs
公共类令牌服务:ITokenService
{
//暂时忽略在同一上下文中使用这些
专用IHttpContextAccessor httpContextAccessor;
私有只读受保护的BrowserStorage\u存储;
//注入可以在ASP.NET中进行
公共代币服务
IHttpContextAccessor HttpContextAccessor,
受保护的浏览器存储
{
httpContextAccessor=httpContextAccessor;
//注入工作,但PBS服务可能不工作:见下文
_储存=储存;
}
//..
}
但是,我不建议将其用于ProtectedBrowser存储,因为它在引擎盖下使用IJSRuntime。如果您尝试在非javascript感知的上下文中使用此选项,例如在启动期间。配置客户端仍在等待响应且无法执行javascript的位置,您将遇到错误。在Blazor中,ProtectedBrowserStorage只能直接或间接地从Blazor组件调用;为了保持简单,可以将其封装在只用于组件的类中,或者将其保存在组件本身中
因此,如果您试图这样做:
我正在startup.cs中使用IHttpClientFactory,我想在api请求之前添加令牌作为标头
ProtectedBrowserStorage不是适合您的工具。使用cookies或其他web服务器技术。在.cs文件中的描述不是很好。它是什么类型的类,如何使用它?类是可注入的吗?我正在本地存储中存储令牌类,我希望在每次api请求之前访问该令牌,我在startup.cs中添加了http头。我希望你能理解我,你需要一个库,或者你需要自己编写javascript。我发现大多数人使用@ilyasvarol,看起来你已经创建了一个浏览器存储服务/助手。您所需要做的就是将相同的服务注入您的TokenService类构造函数以访问它。它是什么类型的类,如何使用它?类是可注入的吗?我正在本地存储中存储令牌类,我希望在每次api请求之前访问该令牌,我在startup.cs中添加了http头。我希望你能理解我,你需要一个库,或者你需要自己编写javascript。我发现大多数人使用@ilyasvarol,看起来你已经创建了一个浏览器存储服务/助手。您所需要做的就是将相同的服务注入您的TokenService类构造函数以访问它。
这段代码到底是做什么的?您需要HttpContext做什么?在任何情况下Blazor中都不可用,因为使用的协议是Signal而不是HTTP。@enet有关详细信息,请参阅问题answer@enet是的,我在我的问题中提到了这一点。不过,Startup的Configure方法使用HTTP,所以您认为HttpContext有效,但SignalR无效。您没有解释代码的作用。我看不出问题中的代码和答案中的代码有多大区别。。。所以你认为HttpContext是有效的,你的意思是我可以将TokenService注入到组件中并能够访问HttpContext对象吗?我说这是我一看到它就要寻找的答案。一切听起来都有道理。因为我们可以在每个.razor文件中使用with inject关键字,我当然认为它可以像您演示的那样使用。但我现在得到下面的注释错误。这段代码到底是做什么的?您需要HttpContext做什么?在任何情况下Blazor中都不可用,因为使用的协议是Signal而不是HTTP。@enet有关详细信息,请参阅问题answer@enet是的,我在我的问题中提到了这一点。不过,Startup的Configure方法使用HTTP,所以您认为HttpContext有效,但SignalR无效。您没有解释代码的作用。我看不出问题中的代码和答案中的代码有多大区别。。。所以你认为HttpContext是有效的,你的意思是我可以将TokenService注入到组件中并能够访问HttpContext对象吗?我说这是我一看到它就要寻找的答案。一切听起来都有道理。因为我们可以在每个.razor文件中使用with inject关键字,我当然认为它可以像您演示的那样使用。但我现在得到下面的评论错误。