改造在本地iis服务器中收到400个错误请求,而在邮递员中收到200个错误请求

时间:2018-07-23 05:20:14

标签: android iis retrofit2 asp.net-core-2.0

我有本地asp .net core 2 IIS服务器。我在使用发帖请求时得到结果。

但是当我尝试使用Retrofit2向Andorid请求时,出现了错误400。

我的android设备和服务器连接到同一个wifi网络

邮差回来

enter image description here

改装退货 enter image description here

我正在使用服务器pc ip而不是localhost进行改造,因为改造不支持本地主机

改造客户

@POST("/Auth/authenticate")
Call<ApiResponse> createAccount(@Body Request user);

改造电话

    request = new Request("01532383497", "123");

    retrofit = RetrofitInstance.getInstance();

    client = retrofit.create(APIClient.class);

    client.createAccount(request).enqueue(new Callback<ApiResponse>() {
        @Override
        public void onResponse(Call<ApiResponse> call, Response<ApiResponse> response) {
            String a=response.body().getType();
            Log.d("d","d");
        }

        @Override
        public void onFailure(Call<ApiResponse> call, Throwable t) {
            Log.d("d","d");
        }
    });

请求对象

public class Request {

String Username;
String Password;

public Request(String Username, String Password) {
    Username = Username;
    Password = Password;
}

public String getUsername() {
    return Username;
}

public void setUsername(String username) {
    Username = username;
}

public String getPassword() {
    return Password;
}

public void setPassword(String password) {
    Password = password;
}
}

改造实例

public class RetrofitInstance {

public static Retrofit retrofit = null;
public static final String END_POINT = "http://192.168.0.104:50111/api/";

public static Retrofit getInstance(){
    if (retrofit == null){

        retrofit = new Retrofit.Builder().baseUrl(END_POINT)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

    }
    return retrofit;
}


}

4 个答案:

答案 0 :(得分:0)

似乎您的请求有误,请尝试以下方式。

@POST("Auth/authenticate")
Call<ApiResponse> createAccount(@Field("Username") String username, @Field("Password") String password);

答案 1 :(得分:0)

您的请求似乎有误,请尝试以下代码,

改造客户

@POST("Auth/authenticate")
@FormUrlEncoded
Call<ApiResponse> createAccount(@FieldMap Map<String,String> params);

改造电话

Map<String,String> params = new HashMap<String, String>();
    params.put("Username", "01532383497");
    params.put("Password", "123");

retrofit = RetrofitInstance.getInstance();

client = retrofit.create(APIClient.class);

client.createAccount(params).enqueue(new Callback<ApiResponse>() {
    @Override
    public void onResponse(Call<ApiResponse> call, Response<ApiResponse> response) {
        String a=response.body().getType();
        Log.d("d","d");
    }

    @Override
    public void onFailure(Call<ApiResponse> call, Throwable t) {
        Log.d("d","d");
    }
  });

答案 2 :(得分:0)

您在邮递员中使用本地服务器,例如 localhost

这意味着您必须使用PC在Emulator中运行项目。并且您的PC和本地服务器PC应该都在同一网络中。

如果您正在使用设备进行测试,则您的测试设备的本地服务器计算机网络和wifi网络应位于同一网络中。

答案 3 :(得分:0)

您应该了解,Android模拟器(虚拟设备)具有自己的网络。因此Google定义了一个神奇的IP地址“ 10.0.2.2”。如果尝试浏览到该IP地址,则请求将被路由到主机的“ 127.0.0.1”回送适配器。但是,默认情况下,这种魔术不适用于IIS Express。

  1. 首先,将您的192.168.0.104地址替换为 END_POINT 中的10.0.2.2。

    def move_char(event):
        if event.keysym == "w":
            # loop through the images
            for ch in (ch2_1, ch2, ch2_2, ch2):
                c.delete('char-image') # remove current image
                c.create_image(725, 450, image=ch, tag='char-image') # use tag to identify image
                c.update() # make the change effective
                sleep(0.2)
    
  2. 下载Jexus Manager并安装。

  3. 单击此处并设置IIS(检查VS版本)-Managing IIS Express Servers

  4. 转到“编辑站点”->绑定

Jexux manager

  1. 添加具有正确值的新绑定,并且主机名应为127.0.0.1。

    • 就我而言,我的访问点来自本地-public static final String END_POINT = "http://10.0.2.2:50111/api/";
    • 添加新绑定后,显示为 Jxux manager binding

    • 这些是我的设置。请更改您的设置。

  2. 运行服务器。

Android魔术似乎将Host标头设置为“ 127.0.0.1”,以便IIS Express可以以这种方式处理请求。

更多信息- How to Let Android Emulator Access IIS Express