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

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

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

/Models/Book.InitSpec.cs

 using System.Collections.Generic;

 namespace PTager.BL
{
public partial class Book
{
public class InitSpec
{
public string Title { get; set; }
public string Subtitle { get; set; }
public IEnumerable<string> Author { get; set; }
public IEnumerable<string> Translator { get; set; }
public string Isbn13 { get; set; }
public string Isbn10 { get; set; }
public string AuthorIntro { get; set; }
public string Summary { get; set; }
public string Publisher { get; set; }
public string Binding { get; set; }
public string OriginTitle { get; set; }
public int Pages { get; set; }
public string ImageUrl { get; set; }
public string Pubdate { get; set; }
public string Catalog { get; set; }
public IEnumerable<string> Tags { get; set; }
}
}
}

实现Post请求部分:

/Pages/Shelves/New.cshtml.cs

 namespace PTager.BL.WebUI.Pages.Shelves
{
using M = Book;
public class NewModel : PageModel
{
private readonly IHostingEnvironment _env;
private readonly string _savePath;
private readonly string _relativePath;
public NewModel(IHostingEnvironment env)
{
_env = env;
_relativePath = Path.Combine("App_Data", "Images/Books", DateTime.Today.ToString("yyyy-MM-dd"));
_savePath = Path.Combine(_env.ContentRootPath, _relativePath);
} [BindProperty]
public string IsbnNbr { get; set; }
public DoubanBookModel DoubanBook { get; set; } public async Task OnGetAsync(string isbn){...//查看之前的博客}
public async Task<IActionResult> OnPostAsync()
{
if (validIsbnNbr(IsbnNbr))
{
DoubanBook = await getDoubanBook();
if (DoubanBook != null)
{
var extention = Path.GetExtension(DoubanBook.image);
var fileName = Guid.NewGuid().ToString() + (string.IsNullOrEmpty(extention) ? ".jpeg" : extention);
await saveImageAsync(fileName, DoubanBook.image);
var spec = new M.InitSpec
{
Author = DoubanBook.author,
AuthorIntro = DoubanBook.author_intro,
Binding = DoubanBook.binding,
Catalog = DoubanBook.catalog,
ImageUrl = Path.Combine(_relativePath, fileName),
Isbn10 = DoubanBook.isbn10,
Isbn13 = DoubanBook.isbn13,
OriginTitle = DoubanBook.origin_title,
Pages = DoubanBook.pages,
Pubdate = DoubanBook.pubdate,
Publisher = DoubanBook.publisher,
Subtitle = DoubanBook.subtitle,
Summary = DoubanBook.summary,
Tags = DoubanBook.tags.Select(x => x.name),
Title = DoubanBook.title,
Translator = DoubanBook.translator
};
}
}
return Page();
}
private async Task saveImageAsync(string fileName, string url)
{
using (var httpClient = new HttpClient())
{
var responseStream = await httpClient.GetStreamAsync(url);
var savePath = Path.Combine(_savePath, fileName);
var stream = new FileStream(savePath, FileMode.Create);
byte[] bArr = new byte[];
int size = responseStream.Read(bArr, , bArr.Length);
while (size > )
{
stream.Write(bArr, , size);
size = responseStream.Read(bArr, , bArr.Length);
}
stream.Close();
responseStream.Close();
}
}
private async Task<DoubanBookModel> getDoubanBook(){...//查看之前的博客}
public async Task<string> HttpGetAsync(string url, Encoding encoding = null){...//查看之前的博客} private bool validIsbnNbr(string isbn){...//查看之前的博客}
}
}

新增IBookRepo和BookRepo:

/Repos/IBookRepo.cs

 using System.Threading.Tasks;

 namespace PTager.BL
{
using M = Book;
public interface IBookRepo
{
Task InitAsync(M.InitSpec spec);
}
}

/Repos/BookRepo.cs

 using System.Threading.Tasks;
using PTager.BL.Data.Store; namespace PTager.BL.Data.Repos
{
using M = Book;
public class BookRepo : RepoBase, IBookRepo
{
public BookRepo(BLDbContext context) : base(context)
{
} public async Task InitAsync(M.InitSpec spec)
=> await _context.Book_Init(spec.ToJson());
}
}

/Store/BLDbContext.cs

         public async Task Book_Init(string json)
=> 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. 运维工具shell简介

    运维第一工具-shell编程 shell历史 Shell的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一种执行命令 ...

  2. Go语言环境安装详细介绍

    工具链介绍 go有两套编译工具链,分别是从plant9移植过来的gc和依赖gcc的gccgo. 官方为gc工具链提供了二进制安装包和源码, 可以根据需要选择一种安装方式.gc工具链对操作系统和CPU类 ...

  3. java.io.CharConversionException: Not an ISO 8859-1 character:

    java.io.CharConversionException: Not an ISO 8859-1 character: XXX 这个问题可能是因为outputstream输出中文字造成的影响. r ...

  4. 迷你MVVM框架 avalonjs 1.2发布

    avalon1.2 带来了许多新特性,让开发更轻松!详见如下: 升级路由系统与分页组件. 对ms-duplex的绑定值进行增强,以前只能prop或prop.prop2,现在可以prop["x ...

  5. VS Code 界面语言设置

    首先Ctrl+shift+p打开命令面板. 输入配置显示语言 回车 更改locale即可更改页面显语言(更改后需重启软件). 目前支持如下语言 Display Language Locale Engl ...

  6. win7局域网内共享文件夹及安全设置

    右键想要共享的文件夹,选择属性. 在文件夹属性对话框中选择共享标签,如图: 点击共享按钮,弹出文件共享对话框. 添加 Everyone ,并根据实际需要修改权限.权限可以是读取 或 读取/写入. 到此 ...

  7. 基于分布式思想下的RPC解决方案--笔记

    分布式: RPC可以提高系统稳定性,比如说,我们的订单服务程序更新出BUG,导致内存溢出,是这台服务器宕机了,但是它只会影响的整个系统的订单业务部分,对于用户注册登录等业务没有影响,同样对于系统的日志 ...

  8. 使用javascript,jquery实现的图片轮播功能

    使用javascript,jquery实现的图片轮播功能本功能采用最基础的javascript和一些简单的jquery技术实现,易理解,以修改使用,代码简易,适合刚开始接触到网站开发的朋友们参考.可以 ...

  9. centos7 ntp服务器配置

    一.ntp服务是什么 1. 定义 NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议. 2. 发展 首次记载在Internet Enginee ...

  10. golang之递归

    翠花,上代码 package main import ( "fmt" "time" ) /* 递归原则,一个大问题分解成相似的小问题 定义好出口条件,否则死循环 ...