登入帳戶  | 訂單查詢  | 購物車/收銀台(0) | 在線留言板  | 付款方式  | 聯絡我們  | 運費計算  | 幫助中心 |  加入書簽
會員登入   新用戶註冊
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2023年度TOP分類閱讀雜誌 香港/國際用戶
最新/最熱/最齊全的簡體書網 品種:超過100萬種書,正品正价,放心網購,悭钱省心 送貨:速遞 / 物流,時效:出貨後2-4日

2024年10月出版新書

2024年09月出版新書

2024年08月出版新書

2024年07月出版新書

2024年06月出版新書

2024年05月出版新書

2024年04月出版新書

2024年03月出版新書

2024年02月出版新書

2024年01月出版新書

2023年12月出版新書

2023年11月出版新書

2023年10月出版新書

2023年09月出版新書

『簡體書』深入浅出:ASP.NET Core

書城自編碼: 3991878
分類: 簡體書→大陸圖書→計算機/網絡操作系統/系統開發
作者: 周家安
國際書號(ISBN): 9787302656685
出版社: 清华大学出版社
出版日期: 2024-04-01

頁數/字數: /
書度/開本: 16开 釘裝: 平装

售價:NT$ 653

我要買

share:

** 我創建的書架 **
未登入.



新書推薦:
冯友兰和青年谈心系列
《 冯友兰和青年谈心系列 》

售價:NT$ 762.0
利他主义的生意:偏爱“非理性”的市场(英国《金融时报》推荐读物!)
《 利他主义的生意:偏爱“非理性”的市场(英国《金融时报》推荐读物!) 》

售價:NT$ 352.0
认知行为疗法:心理咨询的顶层设计
《 认知行为疗法:心理咨询的顶层设计 》

售價:NT$ 454.0
FANUC工业机器人装调与维修
《 FANUC工业机器人装调与维修 》

售價:NT$ 454.0
吕著中国通史
《 吕著中国通史 》

售價:NT$ 286.0
爱琴海的光芒 : 千年古希腊文明
《 爱琴海的光芒 : 千年古希腊文明 》

售價:NT$ 908.0
不被他人左右:基于阿德勒心理学的无压力工作法
《 不被他人左右:基于阿德勒心理学的无压力工作法 》

售價:NT$ 301.0
SDGSAT-1卫星热红外影像图集
《 SDGSAT-1卫星热红外影像图集 》

售價:NT$ 2030.0

建議一齊購買:

+

NT$ 1043
《 深入解析Windows操作系统 第7版 卷1 》
+

NT$ 403
《 区块链原理、架构与应用(第2版) 》
+

NT$ 579
《 Windows Server 2016 Active Directory配置指南 》
+

NT$ 407
《 推荐系统——核心技术、算法与开发实战 》
+

NT$ 505
《 从零开始Linux运维实践 》
+

NT$ 561
《 微信小程序商城开发实战 》
編輯推薦:
ASP.NET Core是建立在.NET基础上的Web开发技术,经过几个版本的迭代,已趋于完善。随着Blazor的不断优化,ASP.NET Core能同时胜任Web前端与后端的开发,最终可生成高性能且跨平台的Web应用程序。本书秉持“学以致用”的理念,内容精练,通俗易懂,以实例的方式阐述知识。读者可以参考书中实例动手实践,提高学习效果。本书主要内容包括:
初始化ASP.NET Core应用程序;
依赖注入与服务容器;
应用程序配置与选项模式;
HTTP管道与中间件;
HTTP状态存储;
Razor页面;
MVC框架与Web API;
模型绑定;
过滤器与标记帮助器;
静态文件;
SignalR与Blazor;
验证与授权。
內容簡介:
这是一本面向ASP.NET Core新手的基础教程,学用相长,注重实践。每个关键知识点都配有简单的示例,以辅助理解。本书内容涉及ASP.NET Core应用程序的初始化、配置,服务容器与依赖注入的使用,HTTP/中间件管道的构建,HTTP会话状态的维护,Razor页面与MVC,Web API,Blazor,静态文件的访问,以及安全与授权。
關於作者:
周家安:微软最有价值专家(MVP),擅长.NET及其相关开发技术,专注于探索简单实用的编程学习方法。长期在博客园等技术社区分享编程经验。曾出版《Go语言入门经典》《精通C# 5.0》《C#码农笔记——从第一行代码到项目实战》《Python实战指南——手把手教你掌握300个精彩案例》等优秀原创科技图书。
目錄
第1章 初始化ASP.NET Core应用程序 1
1.1 应用程序的启动过程 1
1.2 WebApplicationBuilder类 2
1.3 启动应用程序 3
1.4 使用Host初始化应用程序 4
1.4.1 通用主机 5
1.4.2 示例:简单的通用主机 5
1.4.3 Web主机 7
1.5 设置应用程序的URL 9
1.5.1 调用UseUrls()方法 9
1.5.2 使用WebApplication类的Urls属性 10
1.5.3 调用Run()方法时传递URL 10
1.5.4 通过ServerAddressesFeature对象设置URL 11
1.5.5 使用命令行参数 12
1.5.6 使用配置文件 13
1.5.7 使用环境变量 13
1.5.8 使用launchSettings.json文件 14
1.5.9 Kestrel服务器的侦听地址 14
1.5.10 通过HTTP.sys配置URL 15
1.5.11 PreferHostingUrls()方法的作用 15
1.6 应用程序生命周期事件 16
第2章 运行环境 18
2.1 定义运行环境 18
2.2 Is{EnvironmentName}扩展方法 19
2.3 多运行环境下的配置文件 21
2.4 用于环境筛选的Razor标记 23
2.5 运行环境与依赖注入 25
第3章 依赖注入 28
3.1 依赖注入与服务容器 28
3.1.1 ServiceCollection类 31
3.1.2 ServiceProvider类 32
3.2 .NET项目中的依赖注入 32
3.3 ASP.NET Core项目中的依赖注入 33
3.4 构建存在依赖关系的服务 35
3.5 服务的生存期 38
3.6 GetService()方法与GetRequiredService()方法的区别 41
3.7 注入多个服务实例 42
3.8 容易被忽略的问题 46
第4章 配置应用程序 48
4.1 配置的基本结构 48
4.2 在.NET应用程序中使用配置 49
4.3 在ASP.NET Core应用程序中使用配置 51
4.3.1 配置的数据来源 51
4.3.2 查看所有配置信息 51
4.4 IConfigurationBuilder接口 52
4.5 ConfigurationManager类 53
4.6 IConfigurationSource接口与IConfigurationProvider接口 54
4.6.1 自定义扩展点 55
4.6.2 示例:来自CSV文件的配置 56
4.7 JSON配置 59
4.7.1 示例:访问JSON数组对象 62
4.7.2 示例:自动重新加载配置 63
4.8 XML配置 64
4.9 环境变量 67
4.9.1 设置环境变量前缀 68
4.9.2 替换默认的ASPNETCORE_前缀 70
4.9.3 示例:替换环境变量前缀 70
4.9.4 分层配置结构 71
4.10 命令行参数 72
4.11 ini配置 75
4.12 配置与依赖注入 78
4.12.1 示例:将IConfiguration注入MVC控制器 78
4.12.2 示例:通过配置选择哈希算法 79
4.13 链接多棵配置树 82
第5章 选项模式 85
5.1 选项模式概述 85
5.2 服务容器的扩展方法 87
5.3 各接口之间的关系 87
5.3.1 IConfigureOptions接口与IConfigureNamedOptions接口 87
5.3.2 IPostConfigureOptions接口 88
5.3.3 IValidateOptions接口 88
5.3.4 IOptionsFactory接口 89
5.3.5 完整的流程图 90
5.4 选项类的封装接口 91
5.4.1 示例:在MVC控制器中访问选项类 92
5.4.2 示例:自动更新选项类 93
5.5 带名称的选项组 95
5.6 后期配置 98
5.7 选项类的验证 99
5.7.1 内置的验证方式 100
5.7.2 使用数据批注 102
5.8 处理带参数的构造函数 105
5.9 直接实现IOptions接口 108
第6章 HTTP管道 110
6.1 HTTP管道与中间件 110
6.2 中间件的实现方法 110
6.3 通过委托实现中间件 111
6.3.1 示例:Use()方法的简单用法 114
6.3.2 HTTP管道的“短路” 115
6.3.3 Run()方法 116
6.4 通过类实现中间件 117
6.4.1 带参数的中间件 118
6.4.2 中间件类与依赖注入 119
6.5 通过IMiddleware接口实现中间件 120
6.6 终结点 121
6.6.1 示例:常见的HTTP请求方式 123
6.6.2 示例:同时使用Razor Pages和MVC 125
6.6.3 为终结点分配名称 127
6.6.4 元数据 129
6.7 有条件地执行中间件 130
6.7.1 示例:调用包含user_id字段的中间件 131
6.7.2 示例:只允许以POST方式调用Web API 132
第7章 HTTP状态存储 135
7.1 HTTP上下文 135
7.1.1 示例:在中间件中设置响应标头 136
7.1.2 示例:在Map*()方法中访问HTTP上下文 137
7.1.3 示例:使用Razor标记呈现HTTP请求标头 138
7.1.4 示例:在MVC中访问HTTP上下文 140
7.2 HTTP消息头 141
7.2.1 HeaderNames类 143
7.2.2 消息头的分类 144
7.2.3 分析复杂消息头 145
7.3 查询字符串 148
7.3.1 读取查询参数 149
7.3.2 多值参数 150
7.4 表单数据 151
7.4.1 读取简单的表单数据 151
7.4.2 文件上传 153
7.5 Cookie 157
7.6 HttpContext类的Items属性 159
7.7 会话 160
7.7.1 ISession接口 161
7.7.2 设置会话Cookie的名称 164
7.7.3 示例:将会话数据存储到JSON文件中 164
第8章 Razor页面 172
8.1 Razor页面的特点 172
8.2 Razor语法 173
8.2.1 两种表达式 173
8.2.2 代码块 174
8.2.3 注释 175
8.2.4 流程控制 176
8.3 开启Razor页面功能 177
8.4 Razor页面文件 178
8.5 页面文件的搜索路径 179
8.5.1 配置RazorPagesOptions选项类 180
8.5.2 便捷的扩展方法 180
8.6 页面路由 181
8.6.1 通过@page指令设置路由规则 181
8.6.2 通过约定模型定义路由规则 182
8.7 页面模型类 184
8.7.1 页面自身作为模型类 185
8.7.2 从PageModel派生类 185
8.7.3 通过特性类实现页面模型类 186
8.8 页面处理程序 187
8.8.1 通用的处理程序 188
8.8.2 解决POST请求时出现的错误 189
8.8.3 使用多个处理程序 190
8.8.4 通过路由参数选择处理程序 192
8.8.5 自定义的处理程序模型 193
第9章 MVC框架 199
9.1 MVC基本概念 199
9.2 启用MVC功能 199
9.3 控制器 200
9.3.1 示例:从ControllerBase类派生 203
9.3.2 示例:从Controller类派生 205
9.3.3 示例:使用ControllerAttribute 205
9.3.4 示例:使用Controller后缀 206
9.3.5 自定义控制器的名称 207
9.3.6 示例:ControllerNameAttribute类 207
9.3.7 自定义操作方法的名称 208
9.3.8 示例:CustActionNameAttribute类 208
9.3.9 示例:ActionNameAttribute类 209
9.4 MVC路由规则 210
9.4.1 全局路由规则 211
9.4.2 示例:注册两条全局路由规则 211
9.4.3 局部路由规则 212
9.4.4 IRouteTemplateProvider接口 213
9.4.5 通过实现约定接口定义路由规则 214
9.4.6 示例:CustPrefixRouteConvention类 215
9.5 限制操作方法所支持的HTTP请求 217
9.5.1 示例:只支持HTTP-PUT请求的操作方法 217
9.5.2 内置特性类 218
9.6 区域 220
9.7 视图 221
9.7.1 视图文件的默认存放路径 221
9.7.2 自定义视图的路径格式 222
9.7.3 布局视图 225
9.7.4 示例:布局视图的查找顺序 226
9.7.5 示例:配置Razor Pages布局视图的查找路径 229
9.7.6 _ViewImports与_ViewStart文件 231
9.7.7 示例:_ViewStart文件的替换行为 232
9.8 IViewLocationExpander接口 233
9.8.1 示例:多版本视图 234
9.8.2 示例:根据URL查询参数扩展视图路径 237
9.8.3 LanguageViewLocationExpander类 240
9.9 局部视图 242
9.9.1 示例:成绩单 243
9.9.2 示例:导航栏 246
9.10 视图组件 248
9.10.1 示例:一个简单的视图组件 249
9.10.2 视图文件的查找路径 250
9.10.3 示例:带参数的视图组件 251
9.10.4 通过标记帮助器调用视图组件 253
9.10.5 示例:Greeting视图组件 254
9.10.6 示例:在MVC控制器中调用视图组件 255
9.10.7 两个特性类 255
9.11 识别其他程序集中的控制器 256
9.11.1 示例:使用ApplicationPartAttribute类 256
9.11.2 示例:使用AddApplicationPart()扩展方法 257
9.11.3 示例:使用ApplicationPartManager类 259
第10章 模型绑定 261
10.1 概述 261
10.2 自动绑定 262
10.2.1 示例:计算器 263
10.2.2 示例:绑定数组类型的数据 264
10.2.3 示例:绑定复杂类 266
10.2.4 多个参数的模型绑定 268
10.2.5 示例:绑定3个参数 268
10.2.6 字典类型的模型绑定 270
10.2.7 示例:绑定字典数据 270
10.2.8 示例:绑定IFormCollection类型 272
10.2.9 示例:MD5计算器 273
10.2.10 绑定IFormFile和IFormFileCollection类型 274
10.2.11 示例:上传一个文本文件 275
10.2.12 示例:上传多个文件 276
10.3 设置模型绑定的来源 278
10.3.1 示例:绑定HTTP消息头 278
10.3.2 示例:从HTTP消息正文提取数据 279
10.3.3 示例:与路由参数绑定 280
10.3.4 示例:FromServices特性的使用 280
10.3.5 示例:混合使用From*特性类 282
10.3.6 示例:将From*特性类应用于属性成员 283
10.4 自定义IValueProvider接口 284
10.4.1 示例:由自定义字符串提供的值 285
10.4.2 示例:CookieValueProvider 288
10.5 IModelBinder接口 292
10.5.1 内置绑定器 293
10.5.2 示例:AddressInfoModelBinder类 294
10.6 BindRequiredAttribute类与BindNeverAttribute类 296
10.7 绑定到属性成员 299
10.7.1 示例:控制器的属性绑定 299
10.7.2 示例:PageModel中的属性绑定 300
10.7.3 示例:CancellationToken类型的属性绑定 302
第11章 Web API 305
11.1 Web API基础 305
11.1.1 ControllerBase类与Controller类 305
11.1.2 ApiController特性 306
11.1.3 示例:一个简单的Web API 306
11.1.4 示例:以POST方式提交数据 308
11.2 XML格式 310
11.2.1 示例:常规的XML序列化方案 311
11.2.2 示例:使用XmlDataContractSerializer方案 314
11.3 选择响应格式 316
11.3.1 示例:通过Accept消息头选择响应格式 316
11.3.2 示例:使用格式过滤器 317
11.4 自定义格式 319
11.4.1 示例:CustDataInputFormatter类 319
11.4.2 示例:BytesToHexOutputFormatter类 323
11.5 极小API 325
11.5.1 示例:一些简单的极小API例子 325
11.5.2 示例:在极小API上使用数据源特性 327
11.5.3 上传文件 328
11.5.4 示例:直接读取文件流 328
11.5.5 示例:上传多个文件 330
11.5.6 IResult接口 332
11.5.7 示例:Results类的使用 333
11.6 API浏览功能 333
11.6.1 IApiDescriptionGroupCollectionProvider接口 334
11.6.2 示例:列出已定义的Web API 334
11.6.3 API约定 337
11.6.4 Swagger框架 339
11.6.5 示例:使用Swagger生成API文档 340
第12章 过滤器 343
12.1 过滤器的执行过程 343
12.1.1 示例:观察过滤器的运行顺序 344
12.1.2 示例:同时实现多个接口 348
12.2 过滤器的作用域 349
12.2.1 示例:全局过滤器 349
12.2.2 示例:特性化的过滤器 350
12.3 在Razor Pages中使用过滤器 352
12.3.1 示例:在Razor标记页和页面模型类上应用过滤器 352
12.3.2 示例:在Razor Pages中应用全局过滤器 353
12.3.3 页面处理程序的过滤器 354
12.3.4 示例:实现IPageFilter接口 354
12.4 异步过滤器接口 355
12.4.1 示例:实现异步授权过滤器 356
12.4.2 示例:实现异步资源过滤器 356
12.5 IAlwaysRunResultFilter接口 358
12.6 IFilterFactory接口 360
12.6.1 示例:访问服务容器中的过滤器 360
12.6.2 示例:使用TypeFilterAttribute类创建过滤器实例 361
12.6.3 示例:使用ServiceFilterAttribute类访问服务容器中的过滤器 363
12.7 过滤器的运行顺序 364
12.7.1 示例:过滤器的作用域与运行顺序 364
12.7.2 示例:自定义过滤器的运行顺序 368
12.8 抽象的过滤器特性类 369
12.8.1 示例:重写ActionFilterAttribute类 370
12.8.2 示例:重写ExceptionFilterAttribute类 371
第13章 标记帮助器 372
13.1 标记帮助器简介 372
13.1.1 示例:为标记添加“加粗”功能 373
13.1.2 示例:标记帮助器 374
13.1.3 示例:使用标记帮助器设置HTML元素的文本样式 375
13.2 将标记帮助器注册到服务容器 377
13.3 内置的标记帮助器 380
13.3.1 示例:缓存当前时间 380
13.3.2 示例:用元素提交表单 381
13.3.3 示例:asp-for属性的使用 382
13.3.4 示例:呈现验证信息 384
13.4 标记帮助器组件 386
13.4.1 示例:在元素内插入CSS样式 387
13.4.2 示例:使用ITagHelperComponentManager对象注册标记帮助器组件 389
第14章 静态文件 392
14.1 静态文件简介 392
14.2 使用静态文件 393
14.2.1 示例:访问图像文件 393
14.2.2 示例:修改WEBROOT路径 395
14.2.3 示例:统计输入的字符数量 397
14.2.4 示例:合并多个目录 398
14.3 目录浏览 400
14.3.1 示例:浏览外部目录 401
14.3.2 示例:自定义文件类型映射 401
14.4 文件服务 410
第15章 路由约束 412
15.1 路由约束的作用 412
15.2 IRouteConstraint接口 412
15.3 内置的路由约束 413
15.3.1 示例:双精度数值约束 415
15.3.2 示例:限制字符串长度 415
15.3.3 示例:特定格式的订单号 416
15.3.4 示例:限制整数值的范围 417
15.4 自定义路由约束 417
第16章 SignalR 419
16.1 WebSocket 419
16.1.1 示例:用JavaScript实现客户端 419
16.1.2 示例:用.NET控制台实现WebSocket客户端 422
16.1.3 子协议 424
16.2 SignalR基础 427
16.2.1 SignalR中心 428
16.2.2 示例:简易计算器 428
16.2.3 示例:使用面向.NET的SignalR库 430
16.3 调用客户端 433
16.3.1 示例:聊天室 433
16.3.2 将客户端定义为接口 435
16.3.3 示例:实时更新进度条 436
16.3.4 示例:记录连接状态 438
第17章 Blazor 442
17.1 Blazor概述 442
17.2 服务器托管 443
17.2.1 示例:使用Razor Pages承载Blazor应用 444
17.2.2 示例:在MVC视图中承载Blazor应用 446
17.2.3 初始化脚本 448
17.2.4 示例:使用初始化脚本 449
17.2.5 示例:手动添加modules.json文件 450
17.3 WebAssembly托管 451
17.3.1 示例:手动创建Blazor WebAssembly项目 452
17.3.2 示例:用node.js开发Blazor WebAssembly服务器 454
17.3.3 示例:初始化脚本 457
17.3.4 DevServer 458
17.4 路由组件 459
17.4.1 示例:路由组件的简单应用 460
17.4.2 示例:使用路由参数 461
17.4.3 示例:使用[Route]特性 463
17.5 布局组件 463
17.5.1 示例:导航栏 464
17.5.2 示例:将普通组件用于布局 466
17.6 组件参数 466
17.6.1 示例:嵌套组件的参数传递 466
17.6.2 示例:顶层组件的参数传递(Blazor Server) 467
17.6.3 示例:顶层组件的参数传递(Blazor WebAssembly) 468
17.7 级联参数 469
17.7.1 示例:根据类型接收级联参数 469
17.7.2 示例:根据命名接收级联参数 472
17.8 事件 473
17.8.1 示例:计数器 476
17.8.2 示例:记录鼠标指针的位置 476
17.8.3 EventCallback结构体 477
17.8.4 示例:进度条组件 478
17.9 CSS隔离 480
17.10 数据绑定 482
17.10.1 示例:绑定日期输入元素 483
17.10.2 示例:使用oninput事件 483
17.10.3 组件之间的绑定 484
17.10.4 示例:Slider组件 485
17.11 用.NET代码编写组件 486
17.11.1 渲染树 487
17.11.2 示例:用.NET代码实现App和Index组件 488
17.11.3 示例:使用依赖注入 491
17.12 .NET与JavaScript互操作 493
17.12.1 示例:调用JavaScript中的alert()方法 494
17.12.2 示例:调用QRCode.js生成二维码 494
17.12.3 示例:阶乘计算器 496
17.12.4 示例:JavaScript调用.NET对象的实例方法 497
第18章 验证与授权 500
18.1 验证与授权的关系 500
18.2 与验证有关的核心服务 501
18.3 验证处理程序 501
18.3.1 示例:验证HTTP消息头 502
18.3.2 示例:多个验证方案共用一个IAuthenticationHandler接口 505
18.4 IAuthenticationSignInHandler接口 508
18.5 验证中间件 515
18.6 授权处理程序与必要条件 519
18.6.1 示例:允许指定的部门访问 520
18.6.2 PassThroughAuthorizationHandler类 522
18.7 授权策略 525
18.7.1 示例:按用户星级授权 525
18.7.2 示例:集成内置的Cookie验证 529
18.7.3 示例:在终结点上应用授权策略 534
內容試閱
ASP.NET Core由微软官方推出,开放源代码并以社区为主,可以生成运行于Windows、macOS、Linux等操作系统的新型Web应用程序。ASP.NET Core并不是ASP.NET的延续版本,而是经过重新设计和优化的框架。由于它是编译运行的,因此在性能上的优势明显。而且,其内部对异步任务和安全性做了大量集成工作,有些安全功能是默认启用的,如对跨站漏洞攻击的防范。经过六七个版本的迭代,ASP.NET Core已趋向完善,对Web前端与其他数据访问技术的兼容性也得到极大提升。对于常规Web功能、微服务、移动后端以及物联网后端等应用场景,ASP.NET Core都是不错的选择。
本书所涉及的内容针对性强,只要读者具备.NET或C#编程相关基础,即可通过本书快速掌握ASP.NET Core的关键技术。本书在每个知识点的讲解后都会附上专门的示例,方便读者将学到的知识马上付诸实践,加深印象。
ASP.NET Core配有官方开发工具,并共享.NET SDK工具。无论读者使用的是Windows还是Linux操作系统,都可以执行dotnet new命令创建ASP.NET Core应用项目,或执行dotnet run命令运行应用程序。
本书推荐使用官方提供的工具编写代码。
Visual Studio:Windows、macOS用户均可以使用,简称VS。VS是著名的集成开发环境,提供从编码、校验、生成到调试和运行的完整支持。除了代码提示功能,还有联想功能,可以根据代码上下文以及大数据汇总推断各种代码片段,极大地提高编码效率。
Visual Studio Code:简称VS Code或VSC。VS Code是VS的一个分支版本,着重代码编辑功能。VS Code通过安装扩展支持各种编程语言。理论上,只要拥有足够的扩展,VS Code就能编写任何程序语言的代码(如C、C 、Python、C#、Java等)。VS Code能运行在Windows、Linux及macOS等操作系统上,同时也支持ARM架构,如Raspberry Pi OS。使用时先执行dotnet new命令创建ASP.NET Core项目,然后在VS Code中打开项目所在目录即可。
虽然ASP.NET Core可以细分出Razor Pages、MVC、Web API、Blazor等项目,但实际上这些功能是可以在同一个项目中实现的。ASP.NET Core以服务容器为核心,可以组件化扩展。只要向容器注册服务类型,就能开启相关的功能,如MVC与Blazor功能可以同时启用(URL路由不能有冲突)。
本书适合有一定.NET或C#基础的读者阅读,也可以作为高等学校或培训机构的辅助教材。也欢迎想了解ASP.NET Core的开发人员阅读本书。
由于编者水平有限,书中难免出现不妥之处,望广大读者不吝批评指正。

编 者
2024年3月

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 台灣用户 | 香港/海外用户
megBook.com.tw
Copyright (C) 2013 - 2024 (香港)大書城有限公司 All Rights Reserved.