小编Rya*_*mas的帖子

为什么没有 IAwaitable 和 IAwaiter 接口

我最近了解了自定义可等待类型的可能性,正如这个问题和Stephen Toub所说,要成为可等待类型有几个要求。

所以如果一个类型T想要等待它必须

  • 公开一个GetAwaiter返回有效等待者的无参数方法

如果一个类型A想成为一个有效的等待者,它必须

  • 实现INotifyCompletion接口
  • 提供一个名为的布尔属性 IsCompleted
  • 提供一个无参数的GetResult方法,返回voidTResult

所以现在我要问的是,如果所有这些都需要成为可等待类型,为什么某些接口的那部分不是像

public interface INotifyCompletion
{
    bool IsCompleted { get; }
    void OnCompleted(Action continuation);
}

public interface IAwaiter : INotifyCompletion
{
    void GetResult();
}

public interface IAwaitable<TAwaiter> where TAwaiter : IAwaiter
{
    TAwaiter GetAwaiter();
}

public interface IAwaiter<TResult> : INotifyCompletion
{
    TResult GetResult();
}

// this would probably not necessary but …
Run Code Online (Sandbox Code Playgroud)

c# language-design async-await

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

DevOps Pipeline 突然无法访问工件 nuget feed。未经授权

我今天遇到了一个随机发生的问题,即我的所有 DevOps Pipelines 无法再访问我的 NuGet feed,这是一个 DevOps Artifact。

我有一个任务负责安装 AzureSignTool,下面是该任务的 YAML。windows-latest我正在Microsoft 托管代理上使用该图像。

- task: CmdLine@2
  displayName: 'Install AzureSignTool'
  inputs:
    script: |
      set DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true
      dotnet tool install --global AzureSignTool --version 4.0.1
Run Code Online (Sandbox Code Playgroud)

这是因以下错误而失败的任务。

未处理的异常:NuGet.Protocol.Core.Types.FatalProtocolException:无法加载 source 的服务索引。---> System.Net.Http.HttpRequestException:响应状态代码不表示成功:401(未经授权)。

我已经检查了提要的权限,并且可以确认它们Project\Build Administrators已设置为所有者。

我还尝试了各种其他操作,包括更改代理上的 NuGet 版本、更改 AzureSignTool 的版本等。

我应该检查哪些权限/设置?

更新

因此,我将 RestoreNuGetPackages 任务移到 InstallAzureSignTool 之前,并且该任务成功,因此显然它可以毫无问题地进行身份验证。

然而任务仍然失败。我什至添加了--ignore-failed-sources但这没有效果。

错误消息已更改,但根本问题是相同的。

[NuGet Manager] [Info] GET https://api.nuget.org/v3/registration5-gz-semver2/azuresigntool/index.json

[NuGet Manager] [Info] GET https://{ORG}.pkgs.visualstudio.com/_packaging/{GUID}/nuget/v3/registrations2-semver2/azuresigntool/index.json

[NuGet Manager] [Info] Unauthorized https://{ORG}.pkgs.visualstudio.com/_packaging/{GUID}/nuget/v3/registrations2-semver2/azuresigntool/index.json 767ms

[NuGet Manager] [Info] OK https://api.nuget.org/v3/registration5-gz-semver2/azuresigntool/index.json 1010ms

Unhandled …
Run Code Online (Sandbox Code Playgroud)

azure-pipelines azure-artifacts

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

.NET Core Web API API 密钥身份验证AllowAnonymous

我有一个 Web API 项目,其中有许多使用 API 密钥进行保护的端点。为了实现这一点,我编写了一些中间件来处理检查 API 密钥标头并验证它。该中间件在 Startup.cs 中配置

app.UseMiddleware<ApiKeyMiddleware>();
Run Code Online (Sandbox Code Playgroud)

这非常有效,但是我现在需要一个不需要任何授权的端点,以便可以在浏览器中查看它。我希望这可以通过使用AllowAnonymous属性来完成,但是中间件仍然检查 API 密钥。

我可以通过删除中间件并将 API 密钥检查到属性中来实现我想要的目的,但是有更好的方法吗?

编辑:

这是 API 密钥中间件实现。

public class ApiKeyMiddleware
{
    private readonly RequestDelegate _next;
    private const string API_KEY_HEADER = "z-api-key";
    
    public ApiKeyMiddleware(RequestDelegate next)
    {
        _next = next;
    }
    
    public async Task InvokeAsync(HttpContext context)
    {
        if (!context.Request.Headers.TryGetValue(API_KEY_HEADER, out var extractedApiKey))
        {
            context.Response.StatusCode = 401;
            await context.Response.WriteAsync($"Api Key was not found in request. Please pass key in {API_KEY_HEADEr} header.");
            return;
        }

        var appSettings = context.RequestServices.GetRequiredService<IConfiguration>(); …
Run Code Online (Sandbox Code Playgroud)

asp.net-web-api asp.net-core

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

在VB.NET中从列表中删除特定值

我有一个值列表,这些都是字母和数字的组合,用于制作ID,但在某些情况下,这可能只是一个0.

我需要删除这是0的所有场合.

我尝试过类似的东西

For i = 0 the list.count - 1
   If list(i) = "0" Then
       list.RemoveAt(j)
   End If
Next
Run Code Online (Sandbox Code Playgroud)

但是这会在最后抛出一个超出范围异常的参数,因为循环继续,我不能使用Exit For,因为我需要检查多个零.

我不太擅长看起来像我想做的那样的Lamda表达,并且不理解它们,所以如果有人可以给出并解释一个可行的,那就太棒了.

vb.net lambda

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