2016-03-21 10 views
1

Ich habe vor kurzem begonnen, WebApi C# zu lernen, und ich habe eine Frage über Basic Auth. Ich folgte dieser tutorial.WebApi Basic Auth Warnung und GlobalConfiguration nicht im Kontext gefunden

Das Problem, das ich habe, ist eine Warnung zu diesem Teil des Codes.

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

erhalte ich die folgende Warnung:

Advertencia 1 A este método asincrónico le faltan Operadores 'erwarten' y se ejecutará de forma sincrónica. Denken Sie daran, dass Sie warten auf para esperar llamadas API que keine sean de bloqueo o 'warten Task.Run (...)' para realizar tareas auf die CPU in einem unterprocesso en segundo plano. C: Users \ Desarrollo2 \ Source \ Repos \ \ digitalapi \ Digital.WebApi \ Filters \ Auth \ IdentityBasicAuthenticationAttribute.cs 14 51 Digital.WebApi

Wie kann ich dieses Problem lösen oder diese Warnung unterdrücken?

Und ich möge etwas anderes fragen, ist es kein Problem, aber es ist ein langweiliger Fehler ...

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

Fehler 2 El nombre 'GlobalConfiguration' no existe en el contexto tatsächlicher C : \ Benutzer \ Desarrollo2 \ Source \ Repos \ digitalapi \ Digital.WebApi.Tests \ App_Start \ UnityConfig.cs 18 13 Digital.WebApi.Tests

Es feste Reinigungslösung ist und neu kompilieren. Aber wenn es möglich ist, möchte ich wissen, warum manchmal app mir dieses Problem geben.

Entschuldigung, wenn Fehler auf Spanisch sind, ich hoffe, dass dies kein Problem ist, diese Probleme zu lösen.

Vielen Dank im Voraus;

Leider mein schlechtes Englisch ...

Antwort

1

Die Warnung ist, weil Sie async auf Ihrer Methodendefinition, aber nirgends in dem Methodenaufruf verwenden Sie await.

Entfernen Sie die async aus der Methodendefinition und geben Sie eine Aufgabe zurück, um diese Warnung zu entfernen.

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

Dieser Fehler kann auftreten, wenn das Projekt nicht die notwendige DLL für GlobalConfiguration finden.

Verweis auf die Assembly hinzufügen: System.Web.Http.WebHost dll

oder sicherstellen, dass es referenziert wird. Wenn Sie NuGet Pakete verwenden, sollten Sie überprüfen, ob Sie die richtigen Pakete verwenden.Geben Sie für Microsoft ASP.NET Web API 2.*

Hier sind einige Tutorials

Basic Authentication in ASP.NET Web API

A WebAPI Basic Authentication Authorization Filter