书房信息初始化已完成,现在开始处理图书信息新增功能。

主要是实现之前New Razor Pages的后台部分。

新增需要保存的Model:Book.InitSpec.cs

/Models/Book.InitSpec.cs

  1. using System.Collections.Generic;
  2.  
  3. namespace PTager.BL
  4. {
  5. public partial class Book
  6. {
  7. public class InitSpec
  8. {
  9. public string Title { get; set; }
  10. public string Subtitle { get; set; }
  11. public IEnumerable<string> Author { get; set; }
  12. public IEnumerable<string> Translator { get; set; }
  13. public string Isbn13 { get; set; }
  14. public string Isbn10 { get; set; }
  15. public string AuthorIntro { get; set; }
  16. public string Summary { get; set; }
  17. public string Publisher { get; set; }
  18. public string Binding { get; set; }
  19. public string OriginTitle { get; set; }
  20. public int Pages { get; set; }
  21. public string ImageUrl { get; set; }
  22. public string Pubdate { get; set; }
  23. public string Catalog { get; set; }
  24. public IEnumerable<string> Tags { get; set; }
  25. }
  26. }
  27. }

实现Post请求部分:

/Pages/Shelves/New.cshtml.cs

  1. namespace PTager.BL.WebUI.Pages.Shelves
  2. {
  3. using M = Book;
  4. public class NewModel : PageModel
  5. {
  6. private readonly IHostingEnvironment _env;
  7. private readonly string _savePath;
  8. private readonly string _relativePath;
  9. public NewModel(IHostingEnvironment env)
  10. {
  11. _env = env;
  12. _relativePath = Path.Combine("App_Data", "Images/Books", DateTime.Today.ToString("yyyy-MM-dd"));
  13. _savePath = Path.Combine(_env.ContentRootPath, _relativePath);
  14. }
  15.  
  16. [BindProperty]
  17. public string IsbnNbr { get; set; }
  18. public DoubanBookModel DoubanBook { get; set; }
  19.  
  20. public async Task OnGetAsync(string isbn){...//查看之前的博客}
  21. public async Task<IActionResult> OnPostAsync()
  22. {
  23. if (validIsbnNbr(IsbnNbr))
  24. {
  25. DoubanBook = await getDoubanBook();
  26. if (DoubanBook != null)
  27. {
  28. var extention = Path.GetExtension(DoubanBook.image);
  29. var fileName = Guid.NewGuid().ToString() + (string.IsNullOrEmpty(extention) ? ".jpeg" : extention);
  30. await saveImageAsync(fileName, DoubanBook.image);
  31. var spec = new M.InitSpec
  32. {
  33. Author = DoubanBook.author,
  34. AuthorIntro = DoubanBook.author_intro,
  35. Binding = DoubanBook.binding,
  36. Catalog = DoubanBook.catalog,
  37. ImageUrl = Path.Combine(_relativePath, fileName),
  38. Isbn10 = DoubanBook.isbn10,
  39. Isbn13 = DoubanBook.isbn13,
  40. OriginTitle = DoubanBook.origin_title,
  41. Pages = DoubanBook.pages,
  42. Pubdate = DoubanBook.pubdate,
  43. Publisher = DoubanBook.publisher,
  44. Subtitle = DoubanBook.subtitle,
  45. Summary = DoubanBook.summary,
  46. Tags = DoubanBook.tags.Select(x => x.name),
  47. Title = DoubanBook.title,
  48. Translator = DoubanBook.translator
  49. };
  50. }
  51. }
  52. return Page();
  53. }
  54. private async Task saveImageAsync(string fileName, string url)
  55. {
  56. using (var httpClient = new HttpClient())
  57. {
  58. var responseStream = await httpClient.GetStreamAsync(url);
  59. var savePath = Path.Combine(_savePath, fileName);
  60. var stream = new FileStream(savePath, FileMode.Create);
  61. byte[] bArr = new byte[];
  62. int size = responseStream.Read(bArr, , bArr.Length);
  63. while (size > )
  64. {
  65. stream.Write(bArr, , size);
  66. size = responseStream.Read(bArr, , bArr.Length);
  67. }
  68. stream.Close();
  69. responseStream.Close();
  70. }
  71. }
  72. private async Task<DoubanBookModel> getDoubanBook(){...//查看之前的博客}
  73. public async Task<string> HttpGetAsync(string url, Encoding encoding = null){...//查看之前的博客}
  74.  
  75. private bool validIsbnNbr(string isbn){...//查看之前的博客}
  76. }
  77. }

新增IBookRepo和BookRepo:

/Repos/IBookRepo.cs

  1. using System.Threading.Tasks;
  2.  
  3. namespace PTager.BL
  4. {
  5. using M = Book;
  6. public interface IBookRepo
  7. {
  8. Task InitAsync(M.InitSpec spec);
  9. }
  10. }

/Repos/BookRepo.cs

  1. using System.Threading.Tasks;
  2. using PTager.BL.Data.Store;
  3.  
  4. namespace PTager.BL.Data.Repos
  5. {
  6. using M = Book;
  7. public class BookRepo : RepoBase, IBookRepo
  8. {
  9. public BookRepo(BLDbContext context) : base(context)
  10. {
  11. }
  12.  
  13. public async Task InitAsync(M.InitSpec spec)
  14. => await _context.Book_Init(spec.ToJson());
  15. }
  16. }

/Store/BLDbContext.cs

  1. public async Task Book_Init(string json)
  2. => await this.ExecuteMethodCallAsync(nameof(Book_Init), args: json);

记开发个人图书收藏清单小程序开发(九)Web开发——新增图书信息的更多相关文章

  1. 记开发个人图书收藏清单小程序开发(十)DB开发——新增图书信息

    昨晚完成了Web端新增图书信息的功能,现在就差DB的具体实现了. 因为我把Book相关的信息拆分的比较多,所以更新有点小麻烦. 首先,我需要创建一个Book Type的Matter: 然后,将图片路径 ...

  2. 记开发个人图书收藏清单小程序开发(三)DB设计

    主要是参考豆瓣的图书查询接口: https://api.douban.com/v2/book/isbn/:9780132350884 返回内容如下: { "rating": { & ...

  3. 记开发个人图书收藏清单小程序开发(五)Web开发

    决定先开发Web端试试. 新增Web应用: 选择ASP.NET Core Web Application,填写好Name和Location,然后点击OK. 注意红框标出来的,基于.NET Core 2 ...

  4. 记开发个人图书收藏清单小程序开发(六)Web开发

    Web页面开发暂时是没有问题了,现在开始接上Ptager.BL的DB部分. 首先需要初始化用户和书房信息.因为还没有给其他多余的设计,所以暂时只有个人昵称和书房名称. 添加 Init Razor Pa ...

  5. 记开发个人图书收藏清单小程序开发(四)DB设计

    早上起来,又改动了一下: 主要是,将非常用信息全部拆分出来,让Table尽量的小,小到不能继续拆分了,这样区分DB逻辑.增加了FileBank存储Book的封面图片,统一管理图片资源. 新添加的Typ ...

  6. 记开发个人图书收藏清单小程序开发(七)DB设计

    前面的书房初始化的前端信息已经完善,所以现在开始实现DB的Script部分. 新增Action:Shelf_Init.sql svc.sql CREATE SCHEMA [svc] AUTHORIZA ...

  7. 微信小程序开发系列一:微信小程序的申请和开发环境的搭建

    我最近也刚刚开始微信小程序的开发,想把我自学的一些心得写出来分享给大家. 这是第一篇,从零开始学习微信小程序开发.主要是小程序的注册和开发环境的搭建. 首先我们要在下列网址申请一个属于自己的微信小程序 ...

  8. 微信小程序开发系列五:微信小程序中如何响应用户输入事件

    微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...

  9. 微信小程序开发系列七:微信小程序的页面跳转

    微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...

随机推荐

  1. Hive常见问题汇总

    参考资料: Hive常见问题汇总 啟動hive出錯,提示沒有權限 2015年04月02日 09:58:49 阅读数:31769 这里小编汇集,使用Hive时遇到的常见问题. 1,执行#hive命令进入 ...

  2. tensorflow-windows下安装,python3.6

    安装: pip install tensorflow ps:我第一次安装了,但是导入却失败了. 进入\python3\Lib\site-packages\删除了tensorflow,再次pip ins ...

  3. 2个版本并存的python使用新的版本安装django的方法

    2个版本并存的python使用新的版本安装django的方法 默认是使用 pip install django 最新版的django会提示  要求python版本3.4以上,系统默认的版本是2.7.5 ...

  4. 102. Binary Tree Level Order Traversal + 103. Binary Tree Zigzag Level Order Traversal + 107. Binary Tree Level Order Traversal II + 637. Average of Levels in Binary Tree

    ▶ 有关将一棵二叉树转化为二位表的题目,一模一样的套路出了四道题 ▶ 第 102 题,简单的转化,[ 3, 9, 20, null, null, 15, 7 ] 转为 [ [ 15, 7 ] , [ ...

  5. XE7 数据库独立运行需要的文件

    dbxase.dlldbxmss.dlldbxmss9.dlllibeay32.dllmidas.dllMSVCR100.DLL sqlncli10.dllssleay32.dll

  6. 可视化库-Matplotlib-散点图(第四天)

    1. 画基本的散点图 plt.scatterdata[:, 0], data[:, 1], marker='o', color='r', label='class1', alpha=0.4) np.r ...

  7. 跟我学算法- tensorflow 卷积神经网络训练验证码

    使用captcha.image.Image 生成随机验证码,随机生成的验证码为0到9的数字,验证码有4位数字组成,这是一个自己生成验证码,自己不断训练的模型 使用三层卷积层,三层池化层,二层全连接层来 ...

  8. AOP术语

    1.连接点(Joinpoint) 程序执行的某个特定位置:如类开始初始化前,类初始化后,类某个方法调用前,调用后,方法跑出异常后.一个类或一段程序代码拥有一些具有边界性质的特定点.这些代码中的特定点就 ...

  9. maven的pom报plugins缺失的解决方法

    maven的pom报plugins却是的解决方法. 引用 Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom: ...

  10. nodejs API(二)

    官网所在位置:https://nodejs.org/dist/latest-v6.x/docs/api/querystring.html querystring.escape(str) 转义   qu ...