私のAndroidアプリは、私のAndroidアプリからデータを更新して送信するためのWebApiコードを書いたサーバーにいくつかのデータを更新する必要があります。ローカルサーバーでテストしているときは両方とも正常に動作しますが、グローバルにアップロードした後は動作せず、次のようなエラーが発生します:(Androidアプリとフィドラーの両方でテスト済み)
HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD, OPTIONS, TRACE
Content-Type: text/html
Server: Microsoft-IIS/8.0
Android と C# の両方で単純なコードを使用しました。
Android コード:
HttpClient client = new DefaultHttpClient();
HttpPut post = new HttpPut(PUT_SETTINGS_DATA);
try {
JSONStringer vm = new JSONStringer().object().key("UserId")
.value(UserId).key("IsGPSOn").value(String.valueOf(isServiceOn)).endObject();
post.setHeader("Accept", "application/json");
post.setHeader("Content-type", "application/json");
StringEntity entity = new StringEntity(vm.toString());
post.setEntity(entity);
HttpResponse response = client.execute(post);
BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String vv = "";
while((vv = br.readLine()) != null){
Log.v("Response Count", vv+" "+UserId);
}
} catch (JSONException e1) {
e1.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
WebApi コード:
[HttpPut]
public int Put(SettingsVM vm)
{
using (var db = new ApiDBContext())
{
string sqlQry = "Select COUNT(ID) FROM Settings WHERE UserId= '" + vm.UserId + "'";
var count = db.Database.SqlQuery<Int32>(sqlQry).SingleOrDefault();
if (count != 0)
{
string sql = "Update Settings Set IsGPSOn={1} where UserId={0}";
count = db.Database.ExecuteSqlCommand(sql, new object[] { vm.UserId, vm.IsGPSOn });
db.SaveChanges();
}
else
{
string sql = "INSERT INTO Settings(UserId,IsGPSOn) VALUES({0},{1})";
count = db.Database.ExecuteSqlCommand(sql, new object[] { vm.UserId, vm.IsGPSOn });
db.SaveChanges();
}
return count;
}
}
このエラーを解決するために、考えられるすべての解決策を既に確認してテストしていますが、同じ問題に直面しています。
ありがとう