小编ily*_*rol的帖子

[ApiController] 属性有什么作用?

我注意到是否使用此属性是一样的。我错了吗?

举个例子:

[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

5
推荐指数
1
解决办法
969
查看次数

如何从 blazor 中的 .cs 文件访问浏览器本地存储?

首先,我可以访问 .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)

c# browser local-storage blazor blazor-server-side

5
推荐指数
2
解决办法
9030
查看次数

软件包 X 与 netcoreapp3.1 不兼容

我正在尝试在 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

笔记:

  • 我重新安装了所有软件包和.net core 3.1 sdk
  • 同一个项目在另一台电脑上运行

更新

我的问题还没解决。因此我想用截图来详细说明我的问题。我希望有一个人可以帮助我。

错误列表 在此输入图像描述

Nuget 包管理器 > 合并

在此输入图像描述

.net c# visual-studio nuget .net-core

4
推荐指数
1
解决办法
2万
查看次数

为什么 HttpContext.Session 状态更改为已处置?

我正在尝试存储从会话中的外部 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)

c# asp.net-core-3.1

1
推荐指数
1
解决办法
2342
查看次数