111 votes

rénovation "Autorisation", "au Porteur "+ jeton

Je suis en train d'utiliser Retrofit (2), je veux ajouter Token mon Header Comme ceci:
Authorization: Bearer Token mais l' code ci-dessous ne fonctionne pas:

public interface APIService {

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

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

mon serveur est - asp.net webApi s'il vous plaît aider que dois-je faire?

196voto

iagreen Points 4532

Vous avez deux choix: vous pouvez l'ajouter en tant que paramètre à votre appel --

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

Cela peut être un peu gênant parce que vous aurez à passer dans l' "Bearer" + token sur chaque appel. Ceci est pratique si vous n'avez pas très nombreux appels qui nécessitent le jeton.

Si vous souhaitez ajouter l'en-tête à toutes les demandes, vous pouvez utiliser un okhttp intercepteur --

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

38voto

Hamza Rahman Points 133

si vous souhaitez ajouter Porteur du Jeton comme en-Tête, vous pouvez faire ces types de processus.. C'est Une Façon de travailler avec Bearar Jeton

Dans votre Interface

@Headers({ "Content-Type: application/json;charset=UTF-8"})
    @GET("api/Profiles/GetProfile")
    Call<UserProfile> getUser(@Query("id") String id, @Header("Authorization") String auth);

Après que vous appelez la Rénovation de l'objet de cette façon

Retrofit retrofit  = new Retrofit.Builder()
                .baseUrl("your Base URL")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        APIService client = retrofit.create(APIService.class);
        Call<UserProfile> calltargetResponce = client.getUser("0034", "Bearer "+token);
        calltargetResponce.enqueue(new Callback<UserProfile>() {
            @Override
            public void onResponse(Call<UserProfile> call, retrofit2.Response<UserProfile> response) {
                UserProfile UserResponse = response.body();
                Toast.makeText(this, " "+response.body(), Toast.LENGTH_SHORT).show();
            }
            @Override
            public void onFailure(Call<UserProfile> call, Throwable t) {
                //Toast.makeText(this, "Failed ", Toast.LENGTH_SHORT).show();
            }
        });

Un autre Moyen est d'utiliser les intercepter... qui est similaire à la précédente Answaer Mais que le Temps vous avez Juste besoin de Modifier l'Interface Peu Comme

@Headers({ "Content-Type: application/json;charset=UTF-8"})
    @GET("api/Profiles/GetProfile")
    Call<UserProfile> getUser(@Query("id") String id); 

Espérons que cela fonctionnera pour vous

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X