.Net Core 实现账户充值,还款,用户登录(WebApi的安全)
个人未开通网站: http://justin1107.pc.evyundata.cn/vip_justin1107.html
Api

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Iot.Loan.Exam.Dapper;
using Iot.Loan.Exam.Models;
using JWT.Exceptions;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json; namespace Iot.Loan.Exam.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
[EnableCors("any")]
public class LoanController : ControllerBase
{
JWTHelper helper = new JWTHelper();
private IDapper dapper;
public LoanController(IDapper _dapper)
{
dapper = _dapper;
}
/// <summary>
/// 登录
/// </summary>
/// <param name="info"></param>
/// <returns></returns>
[HttpPost]
public string Login([FromForm]UserInfo info)
{
//得到登录model
UserInfo model = dapper.Login(info);
if (model != null)
{
//定义字典存放用户登录的信息
Dictionary<string, object> keys = new Dictionary<string, object>();
keys.Add("User_Name", model.User_Name);
keys.Add("User_ID", model.User_ID);
keys.Add("User_Pwd", model.User_Pwd);
//得到toekn,给他失效时间
string token = helper.GetToken(keys, 30000);
return token;
}
else
{
return null;
}
}
/// <summary>
/// 还款信息列表
/// </summary>
/// <param name="token"></param>
/// <returns></returns>
[HttpPost]
public async Task<List<HuK_UserInfo>> Select(string token)
{
//token解码
string json = helper.GetPayload(token);
//反序列化
UserInfo model = JsonConvert.DeserializeObject<UserInfo>(json);
if (model != null)
{
return await Task.Run(() => { return dapper.Select(model.User_ID); });
}
else
{
return null;
}
}
/// <summary>
/// 账户信息列表
/// </summary>
/// <param name="token"></param>
/// <returns></returns>
[HttpPost]
public async Task<List<ZhuanHu_UserInfo>> ZhuanHuSelect(string token)
{
//token解码
string json = helper.GetPayload(token);
//反序列化
UserInfo model = JsonConvert.DeserializeObject<UserInfo>(json);
if (model != null)
{
return await Task.Run(() => { return dapper.YSelect(model.User_ID); });
}
else
{
return null;
}
}
/// <summary>
/// 还款
/// </summary>
/// <param name="HkId">还款ID</param>
/// <param name="token">用户登录的token,</param>
/// <returns></returns>
[HttpPost]
public int HK(int HkId, string token)
{
string json = helper.GetPayload(token);
UserInfo model = JsonConvert.DeserializeObject<UserInfo>(json);
if (model != null)
{
return dapper.HunKuan(model.User_ID, HkId);
}
else
{
return 0;
}
}
/// <summary>
/// 充值
/// </summary>
/// <param name="money">充值金额</param>
/// <param name="token">用户登录保存的Token</param>
/// <returns></returns>
[HttpPost]
public int CZ(decimal money, string token)
{
//token解码
string json = helper.GetPayload(token);
//反序列化
UserInfo info = JsonConvert.DeserializeObject<UserInfo>(json);
if (info != null)
{
return dapper.CzMoney(info.User_ID, money);
}
else
{
return 0;
}
}
}
}
cshtml

<script src="~/lib/jquery/dist/jquery.js"></script>
<div style="width:150px;height:100px;background-color:aqua">
<table>
<tr>
<th style="width:200px;">可用余额<br /></th>
<th id="th"></th>
</tr>
<tr>
<th colspan="2">
<input hidden="hidden" id="cz_money" type="text" />
<input id="btn_CZ" type="button" value="充值" />
<input id="btn_TX" type="button" value="提现" />
</th>
</tr>
</table>
</div>
<div style="margin-left:0px;margin-top:15px;">
<table>
<tr>
<th>还款期数</th>
<th>还款日期</th>
<th>应还本金</th>
<th>还款利息</th>
<th>还款总额</th>
<th>还款状态</th> </tr>
<tbody id="tb"></tbody>
</table>
</div>
<script>
$('#btn_CZ').click(function () {
$.ajax({
url: 'http://localhost:53048/Api/Loan/CZ?money=' + $('#cz_money').val() + '&token=' + localStorage["User_Name"],
type: 'post',
contentType: 'application/x-www-form-urlencoded',
accepts: 'application/x-www-form-urlencoded',
success: function (data) {
if (data > 0) {
$('#cz_money').attr('hidden', 'hidden');
window.location.reload();
} else {
alert("网络不可用,无法充值");
return;
}
}
})
})
$.ajax({
url: 'http://localhost:53048/Api/Loan/Select?token=' + localStorage["User_Name"],
type: 'post',
contentType: 'application/x-www-form-urlencoded',
accepts: 'application/x-www-form-urlencoded',
success: function (data) {
var tr = '';
var state = '';
$.each(data, function (i, t) {
$('#tb').empty();
if (t.hk_State == 1) {
state = '已还清';
} else if (t.hk_State == 0) {
state = '<a href="#" onclick="HuK(' + t.huanK_id + ')">还款</a>';
} else if (t.hk_State == 2) {
state = '还款';
}
tr += '<tr>';
tr += '<th>' + t.hK_QiShu + '</th>';
tr += '<th>' + t.hk_DataTime + '</th>';
tr += '<th>' + t.hk_BenJin + '</th>';
tr += '<th>' + t.hk_LiXi + '</th>';
tr += '<th>' + (t.hk_BenJin + t.hk_LiXi) + '</th>';
tr += '<th>' + state + '</th>';
tr += '</tr>';
})
$('#tb').append(tr);
}
})
$.ajax({
url: 'http://localhost:53048/Api/Loan/ZhuanHuSelect?token=' + localStorage["User_Name"],
type: 'post',
contentType: 'application/x-www-form-urlencoded',
accepts: 'application/x-www-form-urlencoded',
success: function (data) {
var th = '';
$.each(data, function (i, t) {
$('#th').empty();
th += '<th>' + t.zhuHu_Money + '</th>';
})
$('#th').append(th);
}
})
function HuK(hkid) {
$.ajax({
url: 'http://localhost:53048/Api/Loan/HK?HkId=' + hkid + '&token=' + localStorage["User_Name"],
type: 'post',
contentType: 'application/x-www-form-urlencoded',
accepts: 'application/x-www-form-urlencoded',
success: function (data) {
if (data > 0) {
alert("还款成功");
window.location.reload();
} else if (data == 0) {
alert("还款失败");
} else {
alert("余额不足");
$('#cz_money').removeAttr('hidden');
}
}
})
}
</script>
DapperHelper(我使用的是接口)

public class DapperHelper : IDapper
{
/// <summary>
/// 充值
/// </summary>
/// <param name="UserId"></param>
/// <param name="money"></param>
/// <returns></returns>
public int CzMoney(int UserId, decimal money)
{
using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=Iot.Loan_DB;Integrated Security=True"))
{
return conn.Execute($"update ZhuanHu_UserInfo set ZhuHu_Money=ZhuHu_Money+{money} where User_Id={UserId}");
}
}
/// <summary>
/// 还款
/// </summary>
/// <param name="UserId"></param>
/// <param name="HkId"></param>
/// <returns></returns>
public int HunKuan(int UserId, int HkId)
{
using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=Iot.Loan_DB;Integrated Security=True"))
{
object Zhmoney = conn.ExecuteScalar($"select ZhuHu_Money from ZhuanHu_UserInfo where User_Id={UserId}"); object HkMoney = conn.ExecuteScalar($"select Hk_BenJin+Hk_LiXi from HuK_UserInfo where HuanK_id={HkId}");
if (Convert.ToDouble(Zhmoney) >= Convert.ToDouble(HkMoney))
{
//开始把账户余额减少
int h = conn.Execute($"update ZhuanHu_UserInfo set ZhuHu_Money=ZhuHu_Money-{HkMoney} where User_Id={UserId}");
if (h > 0)
{
//修改还款状态
return conn.Execute($"update HuK_UserInfo set Hk_State=1 where HuanK_id={HkId}");
}
else
{
return 0;
}
}
else
{
//余额不足
return -1;
} }
} /// <summary>
/// 登录
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public UserInfo Login(UserInfo user)
{
using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=Iot.Loan_DB;Integrated Security=True"))
{
string sql = $"select * from UserInfo where User_Name='{user.User_Name}' and User_Pwd='{user.User_Pwd}'";
return conn.Query<UserInfo>(sql).FirstOrDefault();
} }
/// <summary>
/// 还款信息列表
/// </summary>
/// <param name="UserId"></param>
/// <returns></returns>
public List<HuK_UserInfo> Select(int UserId)
{
using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=Iot.Loan_DB;Integrated Security=True"))
{
string sql = $"select * from HuK_UserInfo where User_Id={UserId}";
return conn.Query<HuK_UserInfo>(sql).ToList();
}
}
/// <summary>
/// 账户信息列表
/// </summary>
/// <param name="UserId"></param>
/// <returns></returns>
public List<ZhuanHu_UserInfo> YSelect(int UserId)
{
using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=Iot.Loan_DB;Integrated Security=True"))
{
string sql = $"select * from ZhuanHu_UserInfo where User_Id={UserId}";
return conn.Query<ZhuanHu_UserInfo>(sql).ToList();
}
}
}
.Net Core 实现账户充值,还款,用户登录(WebApi的安全)的更多相关文章
- ASP.NET Core 2.0 MVC - 获取当前登录用户信息
一.前言 上篇实战完成后,没想到会有那么多的圈友给了那么多的支持,甚至连只是作为代码仓储的git上也给了一些小星星,真的感觉很惶恐啊,哈哈哈,毕竟代码写的很烂啊.由于上一篇只是大概说了下项目,所以准备 ...
- Asp.Net Core 项目实战之权限管理系统(5) 用户登录
0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...
- .NET跨平台之旅:ASP.NET Core从传统ASP.NET的Cookie中读取用户登录信息
在解决了asp.net core中访问memcached缓存的问题后,我们开始大踏步地向.net core进军——将更多站点向asp.net core迁移,在迁移涉及获取用户登录信息的站点时,我们遇到 ...
- 【京东账户】——Mysql/PHP/Ajax爬坑之用户登录
一.引言 实现京东的账户项目,功能模块之一,用户登录.要用到的是Apach环境,Mysql.PHP以及Ajax. 二.依据功能创建库.表.记录 创建库:jd 创建表:登录表 添加三条记录 CREATE ...
- ASP.NET Core的身份认证框架IdentityServer4--(5)自定义用户登录(使用官网提供的UI)
IdentityServer官方提供web页面,可以根据需求修改样式.具体UI下载跟配置参考官网文档. 文档地址:https://identityserver4.readthedocs.io/en/r ...
- ASP.NET Core的身份认证框架IdentityServer4--(5)自定义用户登录(通过接口登录,无UI版本)
官网接口详解文档地址:文档地址 (PS:可通过接口名称搜索相应接口信息.) 源码地址:https://github.com/YANGKANG01/IdentityServer4-IdentityAut ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(19)-权限管理系统-用户登录
系列目录 我们之前做了验证码,登录界面,却没有登录实际的代码,我们这次先把用户登录先完成了,要不权限是讲不下去了 把我们之前的表更新到EF中去 登录在Account控制器,所以我们要添加Account ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(19)-权限管理系统-用户登录
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(19)-权限管理系统-用户登录 我们之前做了验证码,登录界面,却没有登录实际的代码,我们这次先把用户登录先 ...
- UWP 应用获取各类系统、用户信息 (1) - 设备和系统的基本信息、应用包信息、用户数据账户信息和用户账户信息
应用开发中,开发者时常需要获取一些系统.用户信息用于数据统计遥测.问题反馈.用户识别等功能.本文旨在介绍在 Windows UWP 应用中获取一些常用系统.用户信息的方法.示例项目代码可参见 Gith ...
随机推荐
- Solution -「多校联训」假人
\(\mathcal{Description}\) Link. 一种物品有 长度 和 权值 两种属性,现给定 \(n\) 组物品,第 \(i\) 组有 \(k_i\) 个,分别为 \((1,a ...
- iptTable规范
规范之HTML 先在当前页面放入几个表格设置按钮的html(样式可能需重新调整) <div class="bottom_nav1 ta_l" style="padd ...
- Springboot整合kaptcha验证码
01.通过配置类来配置kaptcha 01-01.添加kaptcha的依赖: <!-- kaptcha验证码 --> <dependency> <groupId>c ...
- Javers 比较两个类的差异
Javers 在开发过程中遇到需求,比较数据库中的原数据与新修改要写入库中的数据.这个实体类是比较复杂的.例如有基本类型,BigDecimal类型,自定义类型,Date类型,List集合,Set集合, ...
- 分析CC攻击以及防御
实验目的 了解DDoS攻击原理,及一个DDoS攻击的过程 实验内容 了解DDoS攻击原理,及一个DDoS攻击的过程 实验环境描述 1. 学生机与实验室网络直连: 2. VPC1与实验室网络直连: 3. ...
- [杂记]LeTeX中使用tikz画图的一些实例
出处:http://www.texample.net/tikz/examples/all/ 上述网站中的实例非常丰富,将代码修改一下再编译就能明白是什么意思,故不再赘述.
- [题解]UVA658 It's not a Bug, it's a Feature!
链接:http://vjudge.net/problem/viewProblem.action?id=22169 描述:有n个漏洞,m个修复漏洞的方法,每种方法耗时不一样,求修复漏洞的最短时间.每种方 ...
- 细述kubernetes开发流程
本文介绍如何对kubernetes进行二次开发,仓库如何管理,git分支如何管理,怎样利用CI去编译与发布以及如何给社区贡献代码等,结合实际例子,望对大家有所帮助. 开发环境构建 Fork 把gith ...
- 《Selenium+Pytest Web自动化实战》随到随学在线课程,零基础也能学!
课程介绍 课程主题:<Selenium+Pytest Web自动化实战> 适合人群: 1.功能测试转型自动化测试 2.web自动化零基础的小白 3.对python 和 selenium 有 ...
- Excel:如何为某一列写相同的数而不是累加的数
按住CTRL,双击单元格右下角的加号,则该行以下的行都是这个单元格的值 不按CTRL,双击单元格右下角的加号,该行以下的行都是每次加一的数