我有本地asp .net core 2 IIS服务器。我在使用发帖请求时得到结果。
但是当我尝试使用Retrofit2向Andorid请求时,出现了错误400。
我的android设备和服务器连接到同一个wifi网络
邮差回来
我正在使用服务器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;
}
}
答案 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。
首先,将您的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)
下载Jexus Manager并安装。
单击此处并设置IIS(检查VS版本)-Managing IIS Express Servers。
转到“编辑站点”->绑定
添加具有正确值的新绑定,并且主机名应为127.0.0.1。
运行服务器。
Android魔术似乎将Host标头设置为“ 127.0.0.1”,以便IIS Express可以以这种方式处理请求。