Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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# 如何从blazor中的.cs文件访问浏览器本地存储?_C#_Browser_Local Storage_Blazor_Blazor Server Side - Fatal编程技术网

C# 如何从blazor中的.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

首先,我可以访问.razor页面中的本地存储数据。我的意思是我无法访问.cs文件中的本地存储数据。我如何访问

_进口剃须刀:

@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关键字,我当然认为它可以像您演示的那样使用。但我现在得到下面的评论错误。