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

时间:2016-03-21 09:18:46

标签: c# authentication asp.net-web-api2 unity-container

我最近开始学习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 Aestemétodoasincrónicolefaltan operadores'await'yseejecutará   deformasincrónica。考虑到欧洲的运营商'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   平。 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);
    }
}
  

错误2 El nombre'GlobalConfiguration'没有exent en el contexto   实际C:\ Users \ Desarrollo2 \ Source \ Repos \ digitalapi \ Digital.WebApi.Tests \ App_Start \ UnityConfig.cs 18 13 Digital.WebApi.Tests

它是固定的清洁溶液并重新编译。但如果有可能我想知道为什么有时app会给我这个问题。

对不起,如果错误是西班牙语,我希望找出这些问题不是问题。

提前致谢;

抱歉我的英语不好......

1 个答案:

答案 0 :(得分:1)

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

从方法定义中删除async并返回任务以删除该警告。

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