我正在使用 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 口的屏幕截图:
该错误可能与 AzureVersion 的值有关,但我不知道如何修复它,因为请求消息的版本设置为 1.1(当我通过 postman 调用 api 时也是如此)。
最佳答案
根据您的描述,我检查了Microsoft.Azure.Mobile.Server.dll
中的InsertAsync
方法,发现此错误可能是由于将数据保存到数据库时有几个异常(exception)(例如 DbEntityValidationException 、 DbUpdateConcurrencyException 、 DbUpdateException 等)。为了定位这个问题,您需要捕获详细的错误消息,您可以按照以下方法进行操作:
- 使用Fiddler从响应中捕获详细错误,如下所示:
- Remote debug您的网络应用程序,您可以使用
try-catch
包装InsertAsync
以捕获详细错误,如下所示:
综上所述,您可以尝试定位具体错误并解决。或者您可以提供有关此问题的更详细的错误信息,以便我们定位。
关于entity-framework - ASP .Net - Entity Framework - MobileAppService - 将实体对象推送到后端时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43829961/