在Xamarin中使用Simple.OData.Client-无法更新/删除

在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

我正在Xamarin android项目中使用Simple.OData.Client。我正在尝试使用用户授权从Lightswitch odata服务访问数据

get和insert都可以工作:ie FindEntriesAsync()和InsertEntryAsync()

但是,update/delete方法不起作用,即UpdateEntryAsync()和DeleteEntryAsync()。代码只是挂起在await命令上

            // 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响应代码的请求
一些OData服务不检查是否匹配头,但其他(Lightswitch)会检查,并且由于Simple.OData.Client没有设置它们,因此更新和删除操作在这些服务上失败。
该错误现已在即将发布的Simple.OData.Client(3.1)版本中修复。

为什么要使用
RunOnUiThread
?你把这一切都称为什么?是否尝试使用
配置等待(false)