2016-12-10 31 views
16

jetonu:
Authorization: Bearer Token ancak aşağıda code çalışmıyor:güçlendirme "Yetki", "Taşıyıcı" + ben bu gibi benim <code>Header</code> için <code>Token</code> eklemek istediğiniz, <code>Retrofit (2)</code> kullanmaya çalışıyorum

public interface APIService { 

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

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

benim sunucum asp.net webApi lütfen ne yapmalıyım?

+0

Bu şekilde. Java'nın açıklama kuralları ve benzerleri. Dokümantasyon size bir başlık eklemek için başka bir yol verir: http://square.github.io/retrofit/ (bir yöntem paramenter olun) – zapl

cevap

33

İki seçeneğin var - Eğer çağrısına bir parametre olarak ekleyebilirsiniz - Her çağrıda "Bearer" + token geçmek zorunda olacak çünkü

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

Bu biraz sinir bozucu olabilir. Bu, belirteci gerektiren çok fazla çağrı yoksa uygun olur.

tüm isteklere başlığını eklemek istiyorsanız, bir okhttp önleme kullanabilirsiniz - 'token' bir derleme zamanı sabiti olduğunda çalışır bir başlık ekleyerek

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

Benim için bunu uygulayana kadar farketmedim ama belirteci sadece bilinir çalışma zamanında - bu yüzden bunun daha iyi bir çözüm olduğunu düşünüyorum: https://stackoverflow.com/questions/43051558/dagger-retrofit-adding-auth-headers-at-runtime/43083639#43083639 –

İlgili konular