2016-03-21 11 views
1

私は最近、WebApi C#の学習に着手しましたが、基本認証について1つの質問があります。 私はこれに続いてtutorialです。WebApi基本認証とグローバル設定がコンテキストに見つかりません

私が抱えている問題は、コードのこの部分についての警告です。

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エステmétodoasincrónicoルfaltan operadores '待つ' Y SEejecutará デフォーマsincrónica。問題が発生しました。 APIを使用していない場合は、Task.Run(...)を実行してください。 CPUとサブプロセスを分割して実行します。 plano。 C:\ユーザーは\ Desarrollo2 \ソース\レポ\ digitalapi \ Digital.WebApi \フィルタは、認証\ 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エルノンブル「GlobalConfigurationに」no existeエンエルcontexto 実際のC :\ユーザーは\ digitalapi \ Digital.WebApi.Tests \ App_Start UnityConfig.cs 18 \ 13 Digital.WebApi.Tests

それは固定された洗浄液と、再コンパイルされDesarrollo2 \ソース\レポを\します。しかし、可能であれば、なぜ時々appが私にその問題を与えるのか知りたい。

申し訳ありませんエラーがスペイン語である場合は、これらの問題を把握するためには問題ではないと思います。

ありがとうございます。

申し訳ありませんが私の悪い英語...

答えて

1

あなたのメソッドの定義にasyncを持っていませんが、どこにも、メソッドの呼び出しで、あなたがawaitを使用しているため警告があります。

メソッド定義からasyncを削除し、タスクを返してその警告を削除します。プロジェクトはGlobalConfigurationのために必要なDLLが見つからないときにエラーが発生する可能性があります

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

は、アセンブリへの参照を追加します。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

です
関連する問題