2016-03-21 2 views
1

Недавно я начал изучать WebApi C#, и у меня есть один вопрос об Basic Auth. Я следил за этим tutorial.WebApi Basic Auth Warning And GlobalConfiguration не найден в контексте

Проблема, с которой я сталкиваюсь, является предупреждением в этой части кода.

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 Эсте Metodo asincrónico ля faltan operadores 'ждать' у се ejecutará де Форма sincrónica. Considere el uso del operador 'await' para esperar llamadas API que no sean de bloqueo o 'ждут Task.Run (...)' para realizar tareas enlazadas a la CPU en un subproceso en segundo plano. C: \ Users \ Desarrollo2 \ Source \ Репо \ digitalapi \ Digital.WebApi \ Фильтры \ 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' нет Existe ан-эль contexto фактической C : \ Users \ Desarrollo2 \ Source \ Repos \ digitalapi \ Digital.WebApi.Tests \ App_Start \ UnityConfig.cs 18 13 Digital.WebApi.Tests

это фиксированное решение очистки и повторной компиляции. Но если это возможно, я хочу знать, почему иногда приложение дает мне эту проблему.

Извините, если ошибки на испанском языке, я надеюсь, что это не проблема для выяснения этих проблем.

Заранее спасибо;

К сожалению мой плохой английский ...

ответ

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); 
} 

Эта ошибка может произойти, если проект не может найти нужный DLL для GlobalConfiguration.

Добавить ссылку на сборку: System.Web.Http.WebHost длл

или убедитесь, что он идет речь.

Если вы используете пакеты NuGet, вы должны проверить, чтобы убедиться, что используете правильные пакеты.Ищите Microsoft ASP.NET Web API 2.*

Вот некоторые учебники

Basic Authentication in ASP.NET Web API

A WebAPI Basic Authentication Authorization Filter