Uwp 如何通过服务更新本地数据库?

Uwp 如何通过服务更新本地数据库?,uwp,asp.net-web-api2,httprequest,httpclient,bson,Uwp,Asp.net Web Api2,Httprequest,Httpclient,Bson,我试图通过webapi服务更新UWP应用程序中的本地数据库。 我需要将现有实体ID的列表发送到Web服务,并从服务中获取其他实体 我的模型 公共类LibraryCategoryModel { 公共int ID{get;set;} 公共字符串CategoryTitle{get;set;} 公共字节[]图片{get;set;} } 和我的控制器在webapi中 //GET:api/Category 公共IQueryable GetLibraryCategoryModels(HttpRequestM

我试图通过
webapi
服务更新
UWP
应用程序中的本地数据库。 我需要将现有实体ID的列表发送到Web服务,并从服务中获取其他实体

我的模型

公共类LibraryCategoryModel
{
公共int ID{get;set;}
公共字符串CategoryTitle{get;set;}
公共字节[]图片{get;set;}
}
和我的
控制器
webapi中

//GET:api/Category
公共IQueryable GetLibraryCategoryModels(HttpRequestMessage请求)
{
var string1=request.Content.ReadAsStringAsync();
List existingIdCategoryList=新列表();
existingIdCategoryList=JsonConvert.DeserializeObject(string1.Result);
var entityList=db.LibraryCategoryModels.ToList();
foreach(现有IDCategoryList中的变量Id)
{
entityList=entityList.Where(item=>item.ID!=ID).ToList();
}
将entityList返回为IQueryable;
}
还有我的要求

专用异步void LoadDataFromNetwork(列表类别ID列表)
{
if(NetworkHelper.IsInternet()| | NetworkHelper.HasInternet())
{
使用(HttpClient=new HttpClient())
{
client.BaseAddress=新Uri(serviceUrl);
//设定需求
使用(HttpRequestMessage请求=新的HttpRequestMessage(HttpMethod.Get,“Api/类别”))
{
//为BSON设置接受标头。
request.Headers.Accept.Clear();
request.Headers.Accept.Add(新MediaTypeWithQualityHeaderValue(“应用程序/bson”);
string Content=wait Task.Factory.StartNew(()=>JsonConvert.SerializeObject(CategoryIdList));
request.Content=newstringcontent(Content,System.Text.Encoding.UTF8,“application/json”);
var response=wait client.sendaync(请求);
response.EnsureSuccessStatusCode();
//使用BSON格式化程序反序列化结果。
MediaTypeFormatter[]格式化程序=新的MediaTypeFormatter[]{new BsonMediaTypeFormatter()};
尝试
{
var newcategoris=wait response.Content.ReadAsAsync(格式化程序);
foreach(新类别中的var类别)
{
_dataService.InsertCategory(类别);
添加(新的LibraryCategoryViewModel(类别));
_newCategoryIdListFromNetWork.Add(category.ID);
}
}
捕获(例外)
{
投掷;
}
}
}
}
}
这对我来说是可行的,但我不确定这种方式是正确的和最好的解决方案。
请指导我。

首先,如果它有效,并且您没有遇到任何具体问题,那么它可能就足够了。
有很多方法可以改进,但“适当方法”或“最佳解决方案”的定义总是基于意见

尽管如此,以下是一些建议:

  • LibraryCategoryModel
    中包含“模型”是多余的。我会把它拿走
  • 您的API是否需要返回IQueryable?或者我会数不清,或者 即使这样也不够吗始终保持必要的简单
  • string1
    对于变量来说是个糟糕的名称,因为它没有任何意义。使用描述其内容的内容,例如
    requestContent
  • 让您的API方法直接获取
    列表
    ,这样您就不需要处理任何意外输入
  • 处理API方法的意外、无效或丢失的输入
  • API中foreach循环中的逻辑可以大大简化,这样结果只需设置一次,而无需通过传入的列表为每次迭代生成新列表
  • 使用单个静态HTTPClient实例(请参阅)
  • 不要只是捕获异常,然后抛出一个新的异常。所有这些都会丢失任何异常信息。至少您应该记录异常并向用户报告一些情况
  • 您的
    NetworkHelper
    方法名称不能清楚区分它们各自的功能。重命名它们以使其含义和差异更清楚
  • 如果不满足连接等条件,不要什么都不做。如果某件事不可能,则向用户说明,并说明可以采取哪些措施来纠正问题或作为替代方案
  • 如果HTTP请求未成功发出,则抛出未经处理的错误从来都不是一件好事。有很多原因超出了你的控制,这可能意味着一个成功的请求可能是不可能的,只是崩溃不是处理它们的方式
  • 或者,如果处理请求失败的代码与上述代码不同,那么维护上述代码将更加困难
  • 使用API中不同的编码组合可能会在将来混淆其他人(甚至你自己)。除非你有很好的理由发送JSON但请求BSON,否则你应该对两者都使用相同的方法
  • 假设您也将在其他地方使用它们,请为内容编码定义常量。避免在代码中使用神奇的字符串——特别是在代码库中重复的字符串
  • 删除记录代码正在执行的操作的注释。阅读代码时应清楚这一点。如果需要,使代码更清晰。如果有注释说明代码正在做什么,实际上可能会更加混乱。特别是如果代码曾经更改,但注释没有更改
  • 等待创建一个任务来序列化JSON似乎是不必要的。如果不是de,请删除