在上下文中找不到 WebApi 基本身份验证警告和 GlobalConfiguration

WebApi Basic Auth Warning And GlobalConfiguration not found in context

最近开始学习WebApi C#,有一个关于Basic Auth的问题。 我关注了这个 tutorial.

我遇到的问题是关于这部分代码的警告。

public class IdentityBasicAuthenticationAttribute : BasicAuthenticationAttribute
{
    protected override async Task<IPrincipal> AuthenticateAsync(string userName, string password, CancellationToken cancellationToken)
    {
        cancellationToken.ThrowIfCancellationRequested(); 

        if (userName != "testuser" || password != "Pass1word")
        {
            // No user with userName/password exists.
            return null;
        }

        Claim nameClaim = new Claim(ClaimTypes.Name, userName);
        List<Claim> claims = new List<Claim> { nameClaim };

        ClaimsIdentity identity = new ClaimsIdentity(claims, AuthenticationTypes.Basic);

        var principal = new ClaimsPrincipal(identity);
        return principal;
    }
}

我收到以下警告:

Advertencia 1 A este método asincrónico le faltan operadores 'await' y se ejecutará de forma sincrónica. Considere el uso del operador 'await' para esperar llamadas API que no sean de bloqueo o 'await Task.Run(...)' para realizar tareas enlazadas a la CPU en un subproceso en segundo plano. C:\Users\Desarrollo2\Source\Repos\digitalapi\Digital.WebApi\Filters\Auth\IdentityBasicAuthenticationAttribute.cs 14 51 Digital.WebApi

我该如何解决这个问题或抑制那个警告?

我想问点别的,这不是问题,但这是一个无聊的错误...

public static class UnityConfig
{
    public static void RegisterComponents()
    {
        var container = new UnityContainer();

        // register all your components with the container here
        // it is NOT necessary to register your controllers

        // e.g. container.RegisterType<ITestService, TestService>();

        GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
    }
}

Error 2 El nombre 'GlobalConfiguration' no existe en el contexto actual C:\Users\Desarrollo2\Source\Repos\digitalapi\Digital.WebApi.Tests\App_Start\UnityConfig.cs 18 13 Digital.WebApi.Tests

修复解决方案,重新编译。但如果可能的话,我想知道为什么有时应用程序会给我这个问题。

抱歉,如果错误是西班牙语,我希望这不是解决这些问题的问题。

提前致谢;

抱歉我的英语不好...

警告是因为您的方法定义中有 async,但在方法调用中没有使用 await

从方法定义中删除 async 并 return 删除该警告的任务。

protected override Task<IPrincipal> AuthenticateAsync(string userName, string password, CancellationToken cancellationToken)
{
    cancellationToken.ThrowIfCancellationRequested(); 

    if (userName != "testuser" || password != "Pass1word")
    {
        // No user with userName/password exists.
        return null;
    }

    Claim nameClaim = new Claim(ClaimTypes.Name, userName);
    var claims = new List<Claim> { nameClaim };

    ClaimsIdentity identity = new ClaimsIdentity(claims, AuthenticationTypes.Basic);

    var principal = new ClaimsPrincipal(identity);
    return Task.FromResult((IPrincipal)principal);
}

当项目找不到 GlobalConfiguration 所需的 dll 时,就会发生该错误。

添加对程序集的引用:System.Web.Http.WebHost dll

或确保它被引用。

如果您正在使用 NuGet 包,您应该检查以确保您使用的是正确的包。寻找 Microsoft ASP.NET Web API 2.*

这里有一些教程

Basic Authentication in ASP.NET Web API

A WebAPI Basic Authentication Authorization Filter