WPF框架系列课程(小白进阶选择)

2023-11-30 13:40:02 字數 3509 閱讀 9572

提取码: 68vv

接下来,我们需要考虑一下基于路径“api”有什么一级路径呢?没错,就是旅游路线“api/touristroutes”,有两个方法,一个是get请求,获取旅游路线列表,另一个是post请求,创建旅游路线。

除此以外,我们还有另外两条一级链接,订单和购物车,具体的添加方法与上面讲的方法一样,不过请同学们注意一下,因为在linkdto中引用的是action函数的字符串名称,所以,我们还得打开订单和购物车控制器,给这两个api加上字符串名称。

全部链接添加完毕,我们就要可以返回响应了,响应数据就是links列表。现在,用户就可以通过访问这个api的根目录获得api的使用方法了。

route("api")]

apicontroller]

public class rootcontroller: controllerbase

httpget(name = getroot")]

public iactionresult getroot()

既然找到问题所在,那么接下来,就让我们解决这个问题吧。请同学们打开starup文件,我们可以通过services对象访问mvc option对象,来配置自定义**类型。不过我们需要使用的是哪种格式处理器呢?请同学们把目光往下移一行,我们看到在这里添加了newtonjson formatter,这就是对josn数据的格式处理器, 所以我们可以通过拓展这个。第三方插件newtonjson 来实现的自定义**类型。

services.configure(config =>

var outputformatter = config.outputformatters

oftype()?firstordefault();

if (outputformatter !=null)

说句题外话,工厂模式是程序开发的一种设计模式,如果还不懂设计模式的同学,老师强烈建议同学们课后学习一下。因为设计模式是一个合格程序员必备的知识储备,同学们在今后的工作学习中一定会经常接触到。

回到正题,刚刚说到我们要使用工厂模式来创建paginationlist的实例对象。那么就让我们开始搭建这个工厂吧。

public static async task> createasync(

int currentpage, int pagesize, iqueryable result)

pagination

skipvar skip = currentpage - 1) *pagesize;

result = result.skip(skip);

以pagesize为标准显示一定量的数据。

result = result.take(pagesize);

include vs join

var items = await result.tolistasync();

return new paginationlist(currentpage, pagesize, items);

接下来,我们来使用分页模组paginationlist。两个文件需要修改,第一个是仓库接口,gettouristroutesasync,我们要让他返回的数据类型使用我们刚刚创建分页列表类型,ienumrable替换为paginationlist。接下来,接口实现进行同样的操作,把ienumrable替换为paginationlist。

最后,在返回数据的时候,删掉分页处理的部分,返回类型使用paginationlist的实例创建工厂。

public async task> gettouristroutesasync(

string keyword,

string ratingoperator,

int? ratin**alue,

int pagesize,

int pagenumber

iqueryable result = context

touristroutes

include(t =>t.touristroutepictures);

if(!string.isnullorwhitespace(keyword))

if (ratin**alue >=0)

include vs join

return await paginationlist.createasync(pagenumber, pagesize, result);

接下来,我们还需要使用automapper处理model与dto的自动映射。在profile文件夹创建一个新profile文件,文件命名orderprofile。class继承automapper的profile,然后在构建函数中加入model到dto的映射关系。

public class orderprofile : profile

好了,automapper的映射也完成了。让我们回到controller输出数据吧,返回的响应可以使用200 ok,ok函数中传入dto数据,使用automapper _mapper,调用。map函数,《目标数据类型 orderdto>(数据源 order)

httppost("checkout")]

authorize(authenticationschemes = bearer")]

public async task checkout()

1 获得当前用户。

var userid = httpcontextaccessor

httpcontext.user.findfirst(claimtypes.nameidentifier).value;

2 使用userid获得购物车。

var shoppingcart = await _touristrouterepository.getshoppingcartbyuserid(userid);

3 创建订单。

var order = new order()

shoppingcart.shoppingcartitems = null;

4 保存数据。

await _touristrouterepository.addorderasync(order);

await _touristrouterepository.s**easync();

5 return

return ok(_mapper.map(order));

全球流动性框架系列(四) 美国货币市场的生态系

欲穷千里目,更上一层楼。autumn of 前篇,我们聊了美元准备金框架的范式转变及其衍生出的利率调控体系 传统利率走廊向 地板系统 的演化,从政策利率的角度理解了利率间是如何相互影响及 有效沟通 的。读到本篇的读者也许已经对美元流动性框架的体量之大,细节之多深有体会。笔者也以为,只有通盘考虑央行 ...

全球流动性框架系列(一) 美元潮汐 运作机理

流水不腐,户枢不蠹。summer of 当今世界,信贷 杠杆 资产 存在着显著的全球协同特征,美元潮汐 就是其中最重要的一个推动机制,即美联储通过收放美元来不断冲刷全球资产。为什么美元可以造成这么大的影响呢?一方面,自上世纪布雷顿森林体系建立开始,美元先后和价值之理 大宗之王 石油进行绑定,确立了在...

G1 系列课程 极简项目管理,业务骨干升级的制胜密码

很多业务主管都比较头疼手下员工的 项目管理 能力,明明他们单独做某项任务时,做的又好又快,可一旦给他们布置些稍复杂的 需要统筹资源的项目型工作时,他们就掉链子。问题形形色色,常见的有如下几种 上述问题,要么关乎 心态 要么关乎 认知 要么关乎 能力 如果这些bug得不到解决,将会给业务部门和员工个人...