在Xamarin中使用Simple.OData.Client-无法更新/删除
我正在Xamarin android项目中使用Simple.OData.Client。我正在尝试使用用户授权从Lightswitch odata服务访问数据 get和insert都可以工作:ie FindEntriesAsync()和InsertEntryAsync() 但是,update/delete方法不起作用,即UpdateEntryAsync()和DeleteEntryAsync()。代码只是挂起在await命令上在Xamarin中使用Simple.OData.Client-无法更新/删除,xamarin,xamarin.android,odata,visual-studio-lightswitch,Xamarin,Xamarin.android,Odata,Visual Studio Lightswitch,我正在Xamarin android项目中使用Simple.OData.Client。我正在尝试使用用户授权从Lightswitch odata服务访问数据 get和insert都可以工作:ie FindEntriesAsync()和InsertEntryAsync() 但是,update/delete方法不起作用,即UpdateEntryAsync()和DeleteEntryAsync()。代码只是挂起在await命令上 // DELETE NOT WORKING
// DELETE NOT WORKING
RunOnUiThread(() => phoneNumberText.Text = "Trying to delete existing record.");
await client
.For("JobTypes")
.Key(7)
.DeleteEntryAsync();
returnValue = "Deleted OK";
RunOnUiThread(() => phoneNumberText.Text = returnValue);
// UPDATE - NOT WORKING
RunOnUiThread(() => phoneNumberText.Text = "Trying to update existing record.");
String newJobTypeName = "xxNewJobType2changed";
await client
.For("JobTypes")
.Key(7)
.Set(new { JobType1 = newJobTypeName })
.UpdateEntryAsync();
returnValue = "Updated OK";
RunOnUiThread(() => phoneNumberText.Text = returnValue);
// INSERT - working
Boolean isActive = true;
newJobTypeName = "xxNewJobType2";
RunOnUiThread(() => phoneNumberText.Text = "Trying to insert new record.");
var newJobType = await client
.For("JobTypes")
.Set(new { JobType1 = newJobTypeName, IsActive = isActive })
.InsertEntryAsync();
returnValue = "New JobTypeID = " + newJobType["JobTypeId"];
// GET - working
var terms = await client.FindEntriesAsync("JobTypes");
foreach (var term in terms)
{
returnValue += term["JobType1"];
}
我已经把这四个例程的代码都放在这里了。有人看到了吗,或者有人能给点建议吗?这是Simple.OData.Client 3.0中的一个bug,如果匹配etag,它就会被忽略。根据,当发出PUT、MERGE或DELETE请求时,客户端需要在If Match HTTP请求头中指示ETag
- 如果对于给定的客户端,可以覆盖任何版本的 在服务器中输入,然后可以使用值“*”
- 如果给定条目具有ETag且客户端尝试修改或 删除不带If Match标头的条目服务器应失败 带有412响应代码的请求
该错误现已在即将发布的Simple.OData.Client(3.1)版本中修复。为什么要使用
RunOnUiThread
?你把这一切都称为什么?是否尝试使用配置等待(false)
?