using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Winsoft.GOV.XF.WebApi.WXCore.Models; using Senparc.Weixin.MP.CoreMvcExtension; using Winsoft.GOV.XF.WebApi.WXCore.Filters; using Microsoft.Extensions.Options; using Senparc.Weixin.Entities; using Winsoft.GOV.XF.WebApi.WXCore.Data; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; namespace Winsoft.GOV.XF.WebApi.WXCore.Controllers { [Produces("application/json")] [Route("api/User")] public class UserController : BaseController { XFContext _context; ILogger _logger; public UserController(IOptions senparcWeixinSetting, XFContext context, ILogger logger) : base(senparcWeixinSetting) { _context = context; _logger = logger; } [HttpGet] [WeixinInternalRequest("访问被拒绝,请通过微信客户端访问!", "nofilter")] [WXOAuth(appId: null, oauthCallbackUrl: "/api/Auth")] public async Task Get() { WXUser u = await _context.WXUsers.AsNoTracking().SingleOrDefaultAsync(m => m.OpenId == HttpContext.Session.GetString("OpenId")); if (u != null) return Ok(u); else return NotFound(); } [HttpPost] [WeixinInternalRequest("访问被拒绝,请通过微信客户端访问!", "nofilter")] [WXOAuth(appId: null, oauthCallbackUrl: "/api/Auth")] public async Task Post([FromBody]WXUser value) { WXUser u = await _context.WXUsers.AsNoTracking().SingleOrDefaultAsync(m => m.OpenId == HttpContext.Session.GetString("OpenId")); if (u != null && u.Mobile.Equals(value.Mobile, StringComparison.CurrentCultureIgnoreCase)) { return Ok(u); } else { value.OpenId = HttpContext.Session.GetString("OpenId"); try { if (ModelState.IsValid) { _context.WXUsers.Add(value); await _context.SaveChangesAsync(); return Ok(value); } return BadRequest("系统繁忙,稍后再试"); } catch(Exception e) { _logger.LogError(e.Message); return BadRequest("系统异常,稍后再试"); } } } } }