entity-framework - ASP .Net - Entity Framework - MobileAppService - 将实体对象推送到后端时出错

标签 entity-framework azure xamarin code-first

我正在使用 Xamarin 中的离线同步功能在我的移动应用和 Azure 上托管的 MobileAppService 之间同步数据。 我使用 Entity Framework (V6.1.3),使用 Visual Studio 包管理器使用代码优先迁移创建了我的数据库。数据库是 Microsoft SQL Server,托管在 Azure 上。 当我使用离线同步时,数据插入数据库没有问题。但是,当我直接调用 Web api 并以 JSON 格式发送对象时,服务器在执行 InserAsync 时会引发未知异常(我将调试器连接到在 Azure 上运行的 MobileAppService,以找出哪个命令导致了问题):

Exception thrown: 'System.Web.Http.HttpResponseException' in mscorlib.dll

api端点代码如下:

public async Task<IHttpActionResult> PostUser([FromBody] User item)
    {            
        User current = await InsertAsync(item);            
        return CreatedAtRoute("Tables", new { id = current.Id , CreatedAt = System.DateTime.Now }, current);
    }

这就是我在 Xamarin 客户端中调用 api 的方式:

var JsonContent = JsonConvert.SerializeObject(user);
var httpContent = new StringContent(JsonContent, System.Text.Encoding.UTF8, "application/json");                    
var response = await httpClient.PostAsync("tables/User/PostUser", httpContent);

令人震惊的是,如果我使用 postman 调用相同的 api 入口点,一切都会正常。我很困惑,想不出还有什么是这个问题的根源。

我捕获了 Web api 抛出的异常并检查了值。这是远程 Debug模式下监 window 口的屏幕截图: Watch view of remote debug

该错误可能与 AzureVersion 的值有关,但我不知道如何修复它,因为请求消息的版本设置为 1.1(当我通过 postman 调用 api 时也是如此)。

最佳答案

根据您的描述,我检查了Microsoft.Azure.Mobile.Server.dll中的InsertAsync方法,发现此错误可能是由于将数据保存到数据库时有几个异常(exception)(例如 DbEntityValidationExceptionDbUpdateConcurrencyExceptionDbUpdateException 等)。为了定位这个问题,您需要捕获详细的错误消息,您可以按照以下方法进行操作:

  • 使用Fiddler从响应中捕获详细错误,如下所示:

enter image description here

  • Remote debug您的网络应用程序,您可以使用 try-catch 包装 InsertAsync 以捕获详细错误,如下所示:

enter image description here

综上所述,您可以尝试定位具体错误并解决。或者您可以提供有关此问题的更详细的错误信息,以便我们定位。

关于entity-framework - ASP .Net - Entity Framework - MobileAppService - 将实体对象推送到后端时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43829961/

相关文章:

sql - Azure 网站上的 SQL Azure 和 Entity Framework 连接错误

entity-framework - 为什么在 Entity Framework 6中仍未实现ON DELETE SET NULL?有障碍吗?

MySql Entity Framework 数据库优先 - 主键=长?

c# - 无法将 Signalr Client 库作为可移植库添加到 Xamarin 项目

Xamarin Android 从自定义渲染器通过社交媒体分享链接/文本

entity-framework - 每次使用都需要创建/处理的项目的依赖注入(inject)

azure - 使用 AAD 进行组织时,如何为独立 Web 应用程序配置 AAD?

azure - 如何在 ARM 模板中通过 ObjectID 获取 Azure AD 安全组名称?

perl - Azure REST API "Put Block"错误 596?

android - Xamarin Forms IsVisible 属性与动画