Ошибка HTTP 400. Неверное имя хоста запроса - модификация - PullRequest
0 голосов
/ 09 апреля 2020

Я выполняю проект веб-API в Visual Studio 2019. Он отлично работает на локальном хосте на моей машине. Когда я go сделать запрос GET / POST, запрос возвращает «400 неверных запросов недопустимое имя хоста».

Вот мой Web API

    [AllowAnonymous]
    [HttpGet("forTest")]
    public async Task<IActionResult> ForTest()
    {
        return Ok(true);
    }

Я могу попасть на сервер почтальона, позвонив https://localhost:44317/api/users/forTest.


Вот моя android студия настройка,

  1. APIClient

    public class APIClient {
        public static final String BASE_URL = "https://10.0.2.2:44317/api/";
        private static Retrofit retrofit = null;
        private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
        public static Retrofit getClient() {
            if (retrofit == null) {
            //Defining the Retrofit using Builder
            retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL) //This is the only mandatory call on Builder object.
                .addConverterFactory(GsonConverterFactory.create())
                .client(getUnsafeOkHttpClient().build())
                .build();
            }
            return retrofit;
        }
    
        public static OkHttpClient.Builder getUnsafeOkHttpClient() {
            try {
                // Create a trust manager that does not validate certificate chains
                final TrustManager[] trustAllCerts = new TrustManager[]{
                        new X509TrustManager() {
                            @Override
                            public void checkClientTrusted(java.security.cert.X509Certificate[] 
                              chain, String authType) throws CertificateException {
                            }
    
                            @Override
                            public void checkServerTrusted(java.security.cert.X509Certificate[] 
                               chain, String authType) throws CertificateException {
                            }
    
                            @Override
                            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                                return new java.security.cert.X509Certificate[]{};
                            }
                        }
                };
    
                    // Install the all-trusting trust manager
                    final SSLContext sslContext = SSLContext.getInstance("SSL");
                    sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
    
                    // Create an ssl socket factory with our all-trusting manager
                    final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
    
                    OkHttpClient.Builder builder = new OkHttpClient.Builder();
                    builder.sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0]);
                    builder.hostnameVerifier(new HostnameVerifier() {
                        @Override
                        public boolean verify(String hostname, SSLSession session) {
                            return true;
                        }
                    });
                    return builder;
                 } catch (Exception e) {
                    throw new RuntimeException(e);
                 }
            }
    
    
    }
    
  2. ApiService

    public interface ApiService {
    
        @POST("users/authenticate")
        Call<List<AuthData>> doLogin(@Body AuthBody authBody);
    
        @GET("users/forTest")
        Call<Boolean> ApiTest();
    

    } ​​

  3. MainActivity

    Retrofit retrofit = APIClient.getClient();
    ApiService apiService = retrofit.create(ApiService.class);
    
    Call<Boolean> call = apiService.ApiTest();
    
    call.enqueue(new Callback<Boolean>() {
                @Override
                public void onResponse(Call<Boolean> call, Response<Boolean> response) {
                    if(response.code() == 400){
                        try {
                            Log.i("TAG", response.errorBody().string());
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    Log.i("TAG", "ok");
                }
    
                @Override
                public void onFailure(Call<Boolean> call, Throwable t) {
                    Log.i("TAG", t.getLocalizedMessage());
                }
            });
    

Ответ как

Ошибка HTTP 400. Неверное имя хоста запроса.

Есть ли какое-то решение для этого?

1 Ответ

0 голосов
/ 09 апреля 2020

Согласно комментарию @LexLi, я исследую проблему и нахожу решение.

Оригинальная статья - https://blog.lextudio.com/how-to-let-android-emulator-access-iis-express-f6530a02b1d3

...