WPF实战项目十四(API篇):登录注册接口

news/2024/5/19 21:08:25 标签: webapi, .netcore

1、新建UserDto.cs

public class UserDto : BaseDto
    {
		private string userName;
		/// <summary>
		/// 用户名
		/// </summary>
		public string UserName
		{
			get { return userName; }
			set { userName = value;OnPropertyChanged(); }
		}
		private string account;
		/// <summary>
		/// 账户
		/// </summary>
		public string Account
		{
			get { return account; }
			set { account = value; OnPropertyChanged(); }
		}
		private string password;
		/// <summary>
		/// 密码
		/// </summary>
		public string Password
		{
			get { return password; }
			set { password = value; OnPropertyChanged(); }
		}

	}

2、新增ILoginService接口

   public interface ILoginService
    {
        Task<ApiResponse> LoginAsync(string Account, string Password);
        Task<ApiResponse> RegisterAsync(UserDto userDto);

    }

3、实现LoginService接口

public class LoginService : ILoginService
    {
        private readonly IUnitOfWork unitOfWork;
        private readonly IMapper mapper;
        public LoginService(IUnitOfWork unitOfWork, IMapper mapper)
        {
            this.unitOfWork = unitOfWork;
            this.mapper = mapper;
        }
        /// <summary>
        /// 登录
        /// </summary>
        /// <param name="Account"></param>
        /// <param name="Password"></param>
        /// <returns></returns>
        public async Task<ApiResponse> LoginAsync(string Account, string Password)
        {
            try
            {
                var repository = unitOfWork.GetRepository<User>();
                var model = await repository.GetFirstOrDefaultAsync(predicate: t => t.Account.Equals(Account) && t.PassWord.Equals(Password));
                if(model == null)
                {
                    return new ApiResponse(false, "用户名或密码错误!");
                }
                else
                {
                    return new ApiResponse(true, model);
                }
            }
            catch (Exception ex)
            {
                return new ApiResponse(false, ex.Message);
            }
        }
        /// <summary>
        /// 注册
        /// </summary>
        /// <param name="userDto"></param>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        public async Task<ApiResponse> RegisterAsync(UserDto userDto)
        {
            try
            {
                var user = mapper.Map<User>(userDto);
                var repository = unitOfWork.GetRepository<User>();
                var userModel = await repository.GetFirstOrDefaultAsync(predicate: t => t.Account.Equals(user.Account));
                if(userModel != null)
                {
                    return new ApiResponse(false, $"当前账号{user.Account}已存在,请重新注册!");
                }
                else
                {
                    user.CreateDate = DateTime.Now;
                    await repository.InsertAsync(user);
                    if(await unitOfWork.SaveChangesAsync() > 0)
                    {
                        return new ApiResponse(true, user);
                    }
                    else
                    {
                        return new ApiResponse(false, "注册失败!");
                    }
                }
            }
            catch (Exception ex)
            {
                return new ApiResponse(false, ex.Message);
            }
        }
    }

4、新增登录控制器LoginController

/// <summary>
    /// 登录
    /// </summary>
    public class LoginController : BaseApiController
    {
        private readonly ILoginService loginService;

        public LoginController(ILoginService loginService)
        {
            this.loginService = loginService;
        }

        [HttpGet]
        public async Task<ApiResponse> Login(string Account, string PassWord)
        {
            return await loginService.LoginAsync(Account, PassWord);
        }
        [HttpPost]
        public async Task<ApiResponse> Register([FromBody] UserDto userDto)
        {
            return await loginService.RegisterAsync(userDto);
        }
    }

5、添加AutoMapper映射关系

  CreateMap<User, UserDto>().ReverseMap();

6、在program.cs里面添加服务

builder.Services.AddTransient<ILoginService, LoginService>();

7、F5运行项目


http://www.niftyadmin.cn/n/4989688.html

相关文章

合宙Air724UG LuatOS-Air LVGL API控件--图表 (Chart)

图表 (Chart) 一幅图胜过一千个字&#xff0c;通过图表展示出的数据内容能让用户更快速有效的了解数据特征。 代码示例 – 创建图表 chart lvgl.chart_create(lvgl.scr_act(), nil) lvgl.obj_set_size(chart, 200, 150) lvgl.obj_align(chart, nil, lvgl.ALIGN_CENTER, 0, …

C# 实现浏览器控件设置

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System

C语言如何判断闰年?

首先需要了解闰年的判断规则&#xff0c;以下是百度百科的介绍&#xff1a; 1.普通年份能被4整除&#xff0c;且不能被100整除的&#xff0c;是闰年。&#xff08;如2004年就是闰年&#xff09; 2.世纪年份能被400整除的是闰年。&#xff08;如2000年是闰年&#xff0c;1900年不…

c++11 标准模板(STL)(std::basic_ostringstream)(一)

定义于头文件 <sstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_ostringstream;(C11 前)template< class CharT, class Traits std::char_traits<CharT>, class Allocator std::allo…

Python读取遥感影像并计算NDVI指数

Python读取遥感影像并计算NDVI指数 先附上源码 读取的遥感影像数据需要先进行预处理 from osgeo import gdal import numpy as np import pandas as pd import os np.seterr(divideignore, invalidignore)class Grid:# # 1. 函数1 read_tiff读取影像# def read_tiff(self…

C++面试题(丝)-计算机网络部分(1)

目录 1计算机网络 53 简述epoll和select的区别&#xff0c;epoll为什么高效&#xff1f; 54 说说多路IO复用技术有哪些&#xff0c;区别是什么&#xff1f; 55 简述socket中select&#xff0c;epoll的使用场景和区别&#xff0c;epoll水平触发与边缘触发的区别&#xff1f;…

软考A计划-网络工程师-复习背熟-广域网和接入网技术和因特网

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

监听页面异常 + 监听页面跳转 +监听页面销毁 :监听并记录当前页面停留的时间

首先描述一下应用场景&#xff1a;播放视频&#xff0c;记录观看时长&#xff08;移动端左划动&#xff0c;右滑动&#xff0c;页面跳转&#xff0c;页面销毁[页面销毁主要是指使用中控台直接销毁]&#xff09; 说一下我的思路&#xff1a; 1.长链接 : 使用websocket来实现&…