个人未开通网站: 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="充值" />&nbsp;&nbsp;&nbsp;&nbsp;
<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的安全)的更多相关文章

  1. ASP.NET Core 2.0 MVC - 获取当前登录用户信息

    一.前言 上篇实战完成后,没想到会有那么多的圈友给了那么多的支持,甚至连只是作为代码仓储的git上也给了一些小星星,真的感觉很惶恐啊,哈哈哈,毕竟代码写的很烂啊.由于上一篇只是大概说了下项目,所以准备 ...

  2. Asp.Net Core 项目实战之权限管理系统(5) 用户登录

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  3. .NET跨平台之旅:ASP.NET Core从传统ASP.NET的Cookie中读取用户登录信息

    在解决了asp.net core中访问memcached缓存的问题后,我们开始大踏步地向.net core进军——将更多站点向asp.net core迁移,在迁移涉及获取用户登录信息的站点时,我们遇到 ...

  4. 【京东账户】——Mysql/PHP/Ajax爬坑之用户登录

    一.引言 实现京东的账户项目,功能模块之一,用户登录.要用到的是Apach环境,Mysql.PHP以及Ajax. 二.依据功能创建库.表.记录 创建库:jd 创建表:登录表 添加三条记录 CREATE ...

  5. ASP.NET Core的身份认证框架IdentityServer4--(5)自定义用户登录(使用官网提供的UI)

    IdentityServer官方提供web页面,可以根据需求修改样式.具体UI下载跟配置参考官网文档. 文档地址:https://identityserver4.readthedocs.io/en/r ...

  6. ASP.NET Core的身份认证框架IdentityServer4--(5)自定义用户登录(通过接口登录,无UI版本)

    官网接口详解文档地址:文档地址 (PS:可通过接口名称搜索相应接口信息.) 源码地址:https://github.com/YANGKANG01/IdentityServer4-IdentityAut ...

  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(19)-权限管理系统-用户登录

    系列目录 我们之前做了验证码,登录界面,却没有登录实际的代码,我们这次先把用户登录先完成了,要不权限是讲不下去了 把我们之前的表更新到EF中去 登录在Account控制器,所以我们要添加Account ...

  8. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(19)-权限管理系统-用户登录

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(19)-权限管理系统-用户登录 我们之前做了验证码,登录界面,却没有登录实际的代码,我们这次先把用户登录先 ...

  9. UWP 应用获取各类系统、用户信息 (1) - 设备和系统的基本信息、应用包信息、用户数据账户信息和用户账户信息

    应用开发中,开发者时常需要获取一些系统.用户信息用于数据统计遥测.问题反馈.用户识别等功能.本文旨在介绍在 Windows UWP 应用中获取一些常用系统.用户信息的方法.示例项目代码可参见 Gith ...

随机推荐

  1. 《STL源码剖析》学习半生记:第一章小结与反思

    不学STL,无以立.--陈轶阳 从1.1节到1.8节大部分都是从各方面介绍STL, 包括历史之类的(大致上是这样,因为实在看不下去我就直接略到了1.9节(其实还有一点1.8.3的内容)). 第一章里比 ...

  2. VMware Workstation批量克隆虚拟机

    由于经常要用vmware创建虚拟机做一些测试,集群的测试使用连接克隆,可以节省磁盘的空间(如果不是因为穷,没人愿意向生活低头) 于是找到了这个bat脚本,做了一些修改和学习,为大家加上了一些注释,方便 ...

  3. .Net Core Aop之IActionFilter

    一.简介 在.net core 中Filter分为以下六大类: 1.AuthorizeAttribute(权限验证) 2.IResourceFilter(资源缓存) 3.IActionFilter(执 ...

  4. ShaderLab实现Vignette过场动画效果

    实现Vignette过场动画效果 postprocessing中有渐晕效果(Vignette),镜头可以由边缘往中间慢慢变黑: 但是我打包WebGL的时候提示我postprocessing,GPU不支 ...

  5. IDEA配置scala

    IDEA中配置scala 准备:先下好IDEA和scala安装包,配置好jdk环境 scala不想去官网下载的可以直接去百度网盘下载 链接: 链接:https://pan.baidu.com/s/17 ...

  6. Wi-Fi DFS与TPC介绍

    DFS与TPC是wifi认证的其中一项测试内容,如果不需要DFS功能,可以不进行测试,但是某些属于DFS频段的wifi信道则不允许使用. 1. 什么是WIFI Auto DFS? 通俗的说就是:躲雷达 ...

  7. web渗透绕过

    ////目录: 403 IP地址绕过与文件名绕过 登录框绕过 SQL注入绕过 文件上传绕过 RCE绕过 403 IP地址绕过与文件名绕过 X-Forwarded-For:127.0.0.1 X-For ...

  8. 攻防世界--神奇的Modbus

    使用Wireshark在数据包中寻找flag flag是明文形式存储wireshark输入modbus过滤并追踪tcp流追踪tcp流 得到结果:ctf{Easy_Modbus} (虽然在wiresha ...

  9. Linux性能优化实战CPU篇之软中断(三)

    一.软中断 1,中断的定义 a>定义 举例:你点了一份外卖,在无法获知外卖进度的情况下,配送员送外卖是不等人的,到了发现没人取会直接走,所以你只能苦苦等着,时不时去门口看送到没有,无法干别的事情 ...

  10. WPF使用MVVM(三)-事件转命令

    WPF使用MVVM(三)-事件转命令 上一节介绍了WPF中的命令,可是仅仅介绍的是WPF框架给我们提供的点击命令,也就是用Command属性来绑定一个命令,用来响应按钮的点击行为!显然这是不够的,界面 ...