首页 > 编程语言 >篇(13)-Asp.Net Core入门实战-将功能代码增加异步功能Async和配置简单防范CSRF攻击

篇(13)-Asp.Net Core入门实战-将功能代码增加异步功能Async和配置简单防范CSRF攻击

时间:2022-11-19 12:24:42浏览次数:37  
标签:appDbContext Core 13 Asp oldMenu await result menu Id

入门实战-将功能代码增加异步功能Async和配置简单防范CSRF攻击

关于Asp.Net Core的新特性 Async,异步,还是需要掌握的,这个特性,按微软官方的说法是可以提高你服务器的负荷,可以提供更多的服务请求,多用在数据库、文件、Web接口等功能时,必定微软搞的.Net Core,不仅是跨平台,也能支持大型项目研发部署。

我还以Menu功能为例,来对代码进行修改。先需要修改IMenuService.cs接口类的类型声明;

(1).使用方法是现在函数返回类型上声明Task<>,如下

(2).在继承类里,实现函数的代码时,写法如下

public class MenuService : IMenuService
{
private readonly AppDbContext _appDbContext;
public MenuService(AppDbContext appDbContext)
{
_appDbContext = appDbContext;
}

public async Task<bool> AddMenuAsync(Menu menu)
{
menu.IsDelete = false;
menu.AddManagerId = 1;//用户id,可读取Cookie、Session或Claims内用户Id
menu.AddTime = DateTime.Now;
menu.IsSystem = true;
_appDbContext.Menu.Add(menu);
var result = await _appDbContext.SaveChangesAsync();
return result == 1;//注意(result==1 如果等式成立,则返回true,说明删除成功)
}

public async Task<bool> DeleteMenuAsync(int Id)
{
var delMenu = await _appDbContext.Menu.FirstOrDefaultAsync(x => x.Id == Id);
if (delMenu != null)
{
_appDbContext.Menu.Remove(delMenu);
}

var result = await _appDbContext.SaveChangesAsync();
return result == 1; //注意(result==1 如果等式成立,则返回true,说明删除成功)
}

public async Task<Menu> FindMenuAsync(int Id)
{
var item = await _appDbContext.Menu.Where(x => x.Id == Id).FirstOrDefaultAsync();
return item;
}

public async Task<bool> UpdateMenuAsync(int id, Menu menu)
{
var oldMenu = await FindMenuAsync(id); //找出旧对象
//将新值赋到旧对象上
oldMenu.Name = menu.Name;
oldMenu.ParentId = menu.ParentId;
oldMenu.DisplayName = menu.DisplayName;
oldMenu.Sort = menu.Sort;
oldMenu.LinkUrl = menu.LinkUrl;
oldMenu.ModifyManagerId = 11;//
oldMenu.ModifyTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
//对旧对象执行更新
_appDbContext.Entry(oldMenu).State = EntityState.Modified;
var result = await _appDbContext.SaveChangesAsync();
return result == 1;//注意(result==1 如果等式成立,则返回true,说明删除成功)
}
}

 

(3).在Controller中的修改方法如下,注意调用异步方法是前缀有await 关键字,调用EF框架自身的异步函数,例如,在var item = await _appDbContext.Menu.Where(x => x.Id == Id).FirstOrDefaultAsync();这行代码中,FirstOrDefaultAsync(),就是默认的异步方法,回看上一章节,发现就是多了一个Async的后缀;

关于await和async网络上都有详细的解释,各位初学者可以边操作边看理论,有人是理论派,必须搞清楚才会动手写代码,而我是个动手派,先仿照着写,边写边学边理解。回过了头来相互印证一下。

二.关于CSRF(跨站攻击)

在Asp.Net Core 的进行2步简单的配置即可

  1. 在View视图页面,增加 @Html.AntiForgeryToken()
  2. 在Controller的Action声明上,增加[ValidateAntiForgeryToken]的声明,如下图

  1. 关于通过Js(Jquery的Ajax)提交请求时,请求验证在Header中以隐藏变量的方式声明并提交,它的一种写法是这样的(注意请求的Action的ValidateAntiForgeryToken声明不可少):
$.ajax({
type: "POST",
url: "/Article/Edit",//表示请求Action地址
data: { articleid: ArticleId},
beforeSend: function (xhr) {
xhr.setRequestHeader("RequestVerificationToken",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
success: function (res) {
alert('设置成功!');
//window.location.href = "/Article/Index";
},
failure: function (data, error) {
alert('删除失败');
}
});

 

标签:appDbContext,Core,13,Asp,oldMenu,await,result,menu,Id
From: https://www.cnblogs.com/mushaobai/p/16905831.html

相关文章

  • 【ASP.NET Core】MVC控制器的各种自定义:修改参数的名称
    在上一篇中,老周演示了通过实现约定接口的方式自定义控制器的名称。至于说自定义操作方法的名称,就很简单了,因为有内置的特性类可以用。看看下面的例子。[Route("[con......
  • 20201317 LYX 14周学习总结
    MySQL数据库简介MySQL是一个关系型数据库管理系统,是最流行的关系型数据库管理系统之一。在WEB应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关......
  • ASP.NET Core教程-Middleware(中间件)
    更新记录转载请注明出处:2022年11月17日发布。2022年11月16日从笔记迁移到博客。Middleware(中间件)中间件介绍中间件可以处理请求(Request)和响应(Response)。中间......
  • 13.JDK8以上提高开发效率有哪些【双元】(3)
                                                   ......
  • kubernetes_CoreDNS全解析
    一、前言kubernetesCoreDNS是kube-system命令空间里面的一个Pod,用于域名解析。kubernetes自带三个命名空间(用kubeadm安装的Kubernetes集群):defaultkube-public......
  • simpread-(132 条消息) three.js 加载 stl 文件并解析_攻城狮 plus 的博客 - CSDN 博
    threejs加载STL文件效果:加载stl格式的文件需要设置材质material;stl、obj都是静态模型,不可以包含动画,fbx除了包含几何、材质信息,可以存储骨骼动画等数据。代码:......
  • 适易工作流平台 C#工作流平台 ASP.NET工作流平台
     工作流实现思路:1.     参考微软WWF工作流2.     充分利用了原配置实现增删改查的框架3.     完全采用数据库记录,利用WEB实现工作流转和通知,利用WEB实现......
  • 2022-2023-1 20221318 《计算机基础和程序设计》第十二周学习总结
    作业信息这个作业属于那个班级https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求https://www.cnblogs.com/rocedu/p/9577842.html#WEEK12作业目标学习......
  • 定制ASP.NET Core的身份认证
    定制ASP.NETCore的身份认证 大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进。在本章,我们将学习如......
  • LUOGU P1363 幻象迷宫
    题干就用这个题来思路开阔一下吧这个题解的hack数据解释的很好,思路解释也不错这个题解的代码写的不错我是第一个题解的第二个错误思路,然后T了9个点,开$O_2$MLE,冲了好几......