2016-12-10 11 views
16

私は私はこのような私のHeaderTokenを追加したい 、Retrofit (2)を使用しようとしている:
Authorization: Bearer Token が、以下codeは動作しません:改造「認可」、「ベアラー」+トークン

public interface APIService { 

     @Headers({ 
        "Authorization", "Bearer "+ token 
      }) 

    @GET("api/Profiles/GetProfile?id={id}") 
    Call<UserProfile> getUser(@Path("id") String id); 
} 

私のサーバーはasp.net webApi です。どうすればよいですか?

+0

をヘッダのみを追加するこの方法が機能するには、コンパイル時定数です。 Javaのアノテーション規則など。 documetationはヘッダをインクルードする別の方法を提供しています:http://square.github.io/retrofit/(メソッドのパラメータにします) – zapl

答えて

33

次の2つの選択肢を持っている - あなたはあなたの呼び出しにパラメータとして追加することができます - あなたは呼び出しごとに"Bearer" + tokenに合格する必要がありますので

@GET("api/Profiles/GetProfile?id={id}") 
Call<UserProfile> getUser(@Path("id") String id, @Header("Authorization") String authHeader); 

これは少しいらいらすることができます。これは、トークンを必要とするコールがあまりない場合に適しています。

あなたはすべての要求にヘッダを追加したい場合は、あなたがokhttpインターセプターを使用することができます - 「トークン」

OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new Interceptor() { 
     @Override 
     public Response intercept(Chain chain) throws IOException { 
     Request newRequest = chain.request().newBuilder() 
      .addHeader("Authorization", "Bearer " + token) 
      .build(); 
     return chain.proceed(newRequest); 
     } 
    }).build(); 

Retrofit retrofit = new Retrofit.Builder() 
    .client(client) 
    .baseUrl(/** your url **/) 
    .addConverterFactory(GsonConverterFactory.create()) 
    .build(); 
+0

私にとっては実装してもトークンはわかっていません実行時に - これはより良い解決策だと思う:https://stackoverflow.com/questions/43051558/dagger-retrofit-adding-auth-headers-at-runtime/43083639#43083639 –

関連する問題