我注意到是否使用此属性是一样的。我错了吗?
举个例子:
[Route("[controller]")]
[ApiController]
public class DataTablesController: ControllerBase
{
[HttpGet]
public IActionResult Test()
{
return Ok("test");
}
}
Run Code Online (Sandbox Code Playgroud)
当我删除该[ApiController]属性时什么也没发生。
在微软的文档中,我找到了这样的解释:
指示类型和所有派生类型用于提供 HTTP API 响应。
使用此属性修饰的控制器配置了旨在改善开发人员构建 API 体验的功能和行为。
在程序集中装饰时,程序集中的所有控制器都将被视为具有 API 行为的控制器。
什么是 API 行为?我们为什么要使用它?
c# controller asp.net-apicontroller .net-attributes asp.net-core
首先,我可以访问 .razor 页面中的本地存储数据。我的意思是我无法访问 .cs 文件中的本地存储数据。我怎样才能访问?
_Imports.razor:
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage;
@inject ProtectedLocalStorage protectedLocalStorage
Run Code Online (Sandbox Code Playgroud)
任何人 .razor 文件:
await protectedLocalStorage.SetAsync(key, JsonSerializer.Serialize(instance));
Run Code Online (Sandbox Code Playgroud)
上面的代码适用于我,但我想另外从 .cs 文件调用 protectedLocalStorage。
PS抱歉语法错误
编辑:我在startup.cs中使用IHttpClientFactory,我想在api请求之前添加令牌作为标头。
启动.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);
});
Run Code Online (Sandbox Code Playgroud)
我想从这个 .cs 文件的本地存储中获取令牌值
public class TokenService : ITokenService
{
private IHttpContextAccessor httpContextAccessor;
public TokenService(IHttpContextAccessor HttpContextAccessor, IProtected) => httpContextAccessor = HttpContextAccessor;
public string GetToken()
{
return "";
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 VS 2019 中运行我的 .net core 3.1 项目,但在构建过程中遇到如下错误。
严重性代码说明项目文件行抑制状态错误NU1202 包System.Diagnostics.DiagnosticSource 4.5.0 与netcoreapp3.1 (.NETCoreApp,版本=v3.1) 不兼容。包 System.Diagnostics.DiagnosticSource 4.5.0 不支持任何目标框架。WebApi.Base C:\Users\ilyas.varol.TEST\source\repos\performancemanagementprojects\WebApi.Base\WebApi.Base.csproj
笔记:
更新
我的问题还没解决。因此我想用截图来详细说明我的问题。我希望有一个人可以帮助我。
Nuget 包管理器 > 合并
我正在尝试存储从会话中的外部 api 获取的令牌。
与此相关的代码片段;
[HttpPost]
public async void Post()
{
if (HttpContext.Session.GetValue<User>("Token") == null)
{
HttpContext.Session.SetValue("Token", "test");
var res = await _loginBusiness.GetToken();
HttpContext.Session.SetValue("Token", res);
}
}
Run Code Online (Sandbox Code Playgroud)
HttpContext.Session.SetValue("令牌", "测试");
在此部分中,它不会发生任何错误,但第二个相同的代码行在 GetToken() 之后给出错误。
相关错误
System.ObjectDisposeException:'IFeatureCollection 已被释放。对象名称:“集合”。
还有 GetToken():
public async Task<User> GetToken()
{
String url = "login/login";
var client = httpClientFactory.CreateClient("VoiceScope");
var postRes = await client.PostAsync<User>(new UserLogin(), url);
return postRes;
}
Run Code Online (Sandbox Code Playgroud)