• asp.net core 3.1 webapi 接口设计备忘


    using System;
    using System.Collections.Generic;
    using System.IdentityModel.Tokens.Jwt;
    using System.Linq;
    using System.Security.Claims;
    using System.Text;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Extensions.Caching.Memory;
    using Microsoft.Extensions.Configuration;
    using Microsoft.IdentityModel.Tokens;
    
    namespace MyWeb.Api.UserService.Controllers
    {
        [Route("api/[controller]/[action]")]
        [ApiController]
        [Authorize]
        public class UserController : ControllerBase
        {
            private readonly AppDb Db;
            private readonly IConfiguration Configuration;
            private readonly IMemoryCache _memoryCache;
    
            public UserController(AppDb db, IConfiguration configuration, IMemoryCache memoryCache)
            {
                Db = db;
                Configuration = configuration;
                _memoryCache = memoryCache;
            }
    
            // POST: api/User/Login
            [AllowAnonymous]
            [HttpPost]
            [ProducesResponseType(StatusCodes.Status200OK)]
            [ProducesResponseType(StatusCodes.Status404NotFound)]
            [ProducesResponseType(StatusCodes.Status400BadRequest)]
            public ActionResult<string> Login(LoginModel model)
            {
                if (string.IsNullOrEmpty(model.Account))
                {
                    return BadRequest("账号不能为空");
                }
    
                if (string.IsNullOrEmpty(model.Password))
                {
                    return BadRequest("密码不能为空");
                }
    
                Db.Open();
                AppUserQuery appUserQuery = new AppUserQuery(Db);
                AppUserModel appUserModel = appUserQuery.GetModelByAccount(model.Account);
                if (appUserModel == null || appUserModel.Password != Utils.md5(model.Password))
                {
                    return NotFound("账号不存在或密码不正确");
                }
    
                var claims = new[]
                {
                        new Claim(ClaimTypes.Name, appUserModel.Id.ToString())
                    };
                var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Token:Secret"]));
                var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
                var jwtToken = new JwtSecurityToken(Configuration["Token:Issuer"], Configuration["Token:Audience"], claims, expires: DateTime.Now.AddDays(int.Parse(Configuration["Token:AccessExpiration"])), signingCredentials: credentials);
                return new JwtSecurityTokenHandler().WriteToken(jwtToken);
            }
    
            // POST: api/User/Register
            [AllowAnonymous]
            [HttpPost]
            [ProducesResponseType(StatusCodes.Status200OK)]
            [ProducesResponseType(StatusCodes.Status400BadRequest)]
            public ActionResult Register(RegisterModel model)
            {
                if (string.IsNullOrEmpty(model.Account))
                {
                    return BadRequest("账号不能为空");
                }
    
                if (string.IsNullOrEmpty(model.Password))
                {
                    return BadRequest("密码不能为空");
                }
    
                if (string.IsNullOrEmpty(model.SMSCode))
                {
                    return BadRequest("短信验证码不能为空");
                }
    
                string smsCode;
                if (!_memoryCache.TryGetValue(model.Account, out smsCode))
                {
                    return BadRequest("验证码未发送");
                }
                else
                {
                    if (smsCode != model.SMSCode)
                    {
                        return BadRequest("验证码不正确");
                    }
                }
    
                Db.Open();
                AppUserQuery appUserQuery = new AppUserQuery(Db);
                AppUserModel appUserModel = appUserQuery.GetModelByAccount(model.Account);
                if (appUserModel != null)
                {
                    return BadRequest("账号已存在");
                }
    
                appUserModel = new AppUserModel(Db);
                appUserModel.Account = model.Account;
                appUserModel.Password = Utils.md5(model.Password);
                appUserModel.Createtime = DateTime.Now;
                appUserModel.Insert();
                _memoryCache.Remove(model.Account);
                return Ok();
            }
    
            // POST: api/User/Password
            [HttpPost]
            [ProducesResponseType(StatusCodes.Status200OK)]
            [ProducesResponseType(StatusCodes.Status404NotFound)]
            [ProducesResponseType(StatusCodes.Status400BadRequest)]
            public ActionResult Password(PasswordModel model)
            {
                if (string.IsNullOrEmpty(model.OriginalPassword))
                {
                    return BadRequest("原密码不能为空");
                }
    
                if (string.IsNullOrEmpty(model.NewPassword))
                {
                    return BadRequest("新密码不能为空");
                }
    
                var identity = User.Identity as ClaimsIdentity;
                int uid = int.Parse(identity.Name);
    
                Db.Open();
                AppUserQuery appUserQuery = new AppUserQuery(Db);
                AppUserModel appUserModel = appUserQuery.GetModelById(uid);
                if (appUserModel == null)
                {
                    return BadRequest("账号不存在");
                }
    
                if (appUserModel.Password != Utils.md5(model.OriginalPassword))
                {
                    return NotFound("原密码不正确");
                }
                appUserModel.Password = Utils.md5(model.NewPassword);
                appUserModel.Update();
    
                return Ok();
            }
    
            [HttpGet]
            [ProducesResponseType(StatusCodes.Status200OK)]
            [ProducesResponseType(StatusCodes.Status404NotFound)]
            public ActionResult<AppUserModel> Info()
            {
                var identity = User.Identity as ClaimsIdentity;
                int uid = int.Parse(identity.Name);
    
                Db.Open();
                AppUserQuery appUserQuery = new AppUserQuery(Db);
                AppUserModel appUserModel = appUserQuery.GetModelById(uid);
                if (appUserModel == null)
                {
                    return BadRequest("账号不存在");
                }
    
                appUserModel.Password = string.Empty;
                return appUserModel;
            }
    
            // POST: api/User/Nickname/{nickname}
            [HttpPost("{nickname}")]
            [ProducesResponseType(StatusCodes.Status200OK)]
            [ProducesResponseType(StatusCodes.Status404NotFound)]
            [ProducesResponseType(StatusCodes.Status400BadRequest)]
            public ActionResult Nickname(string nickname)
            {
                if (string.IsNullOrEmpty(nickname))
                {
                    return BadRequest("昵称不能为空");
                }
    
                var identity = User.Identity as ClaimsIdentity;
                int uid = int.Parse(identity.Name);
    
                Db.Open();
                AppUserQuery appUserQuery = new AppUserQuery(Db);
                AppUserModel appUserModel = appUserQuery.GetModelById(uid);
                if (appUserModel == null)
                {
                    return BadRequest("账号不存在");
                }
    
                appUserModel.Nickname = nickname;
                appUserModel.Update();
                return Ok();
            }
        }
    }
  • 相关阅读:
    【题解】 P1373 小a和uim之大逃离
    题解 CF576C 【Points on Plane】
    题解 P4799 【[CEOI2015 Day2]世界冰球锦标赛】
    【题解】[JSOI2008]最大数
    题解 P3389 【【模板】高斯消元法】
    【模板】矩阵加速
    【模板】树状数组上的差分数组
    tarjan求强连通分量(模板)
    我好菜系列——map查找
    trie树的应用;
  • 原文地址:https://www.cnblogs.com/bruceleeliya/p/12241230.html
Copyright © 2020-2023  润新知