2016-12-10 5 views
16

Ich versuche Retrofit (2) zu verwenden, möchte ich Token meiner Header Like this hinzuzufügen:
Authorization: Bearer Token aber die code unten nicht funktioniert:Retrofit "Authorization", "Bearer" + Token

public interface APIService { 

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

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

mein Server ist asp.net webApi bitte helfen, was soll ich tun?

+0

diese Weise wird ein Header nur das Hinzufügen funktioniert, wenn ‚token‘ eine Kompilierung konstant ist. Javas Annotationsregeln und so. Die Dokumentation gibt Ihnen eine andere Möglichkeit, einen Header zu integrieren: http://square.github.io/retrofit/ (mach es zu einem Methodenparameter) – zapl

Antwort

33

Sie haben zwei Möglichkeiten - Sie können es als Parameter auf Ihren Anruf hinzufügen können -

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

Dies ist ein bisschen lästig sein kann, weil man in der "Bearer" + token bei jedem Aufruf übergeben werden müssen. Dies ist geeignet, wenn Sie nicht viele Anrufe haben, die das Token benötigen.

Wenn Sie den Header auf alle Anforderungen hinzufügen möchten, können Sie eine okhttp Interceptor verwenden -

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

Für mich wurde mir erst klar, dass ich es implementiert habe, aber das Token ist nur bekannt zur Laufzeit - daher denke ich, dass dies eine bessere Lösung ist: https://stackoverflow.com/questions/43051558/dagger-retrofit-adding-auth-headers-at-runtime/43083639#43083639 –

Verwandte Themen