using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Options;
using Microsoft.IdentityModel.Tokens;
using Volo.Abp;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Uow;
using Yi.Framework.Rbac.Domain.Entities;
using Yi.Framework.Rbac.Domain.Shared.Options;
using Yi.Framework.SqlSugarCore.Abstractions;
namespace Yi.Framework.Rbac.Application.Services
{
///
/// 测试文档控制器
///
public class TestServcie : ApplicationService
{
private IRepository _repository;
private IUnitOfWorkManager _unitOfWork;
private ISqlSugarRepository _sqlsugarRepository;
public IOptions options { get; set; }
public TestServcie(IRepository repository, IUnitOfWorkManager unitOfWork, ISqlSugarRepository sqlsugarRepository, IRepository repository2)
{
_unitOfWork = unitOfWork;
_repository = repository;
_sqlsugarRepository = sqlsugarRepository;
}
///
/// 你好,多线程
///
///
public async Task GetTaskTest()
{
var tasks = Enumerable.Range(0, 2).Select(x =>
{
return Task.Run(async () =>
{
using (var uow = _unitOfWork.Begin(true))
{
// await _repository.GetListAsync();
await _sqlsugarRepository._DbQueryable.ToListAsync();
await uow.CompleteAsync();
}
});
}).ToList();
await Task.WhenAll(tasks);
return "你哈";
}
[Authorize]
public async Task> GetTest()
{
//using (var uow = _unitOfWork.Begin(true))
//{
var data = await _repository.GetListAsync();
var data2 = await _repository.GetListAsync();
//await uow.CompleteAsync();
return data;
//}
}
//[UnitOfWork]
public async Task PostTest()
{
//using (var uow = _unitOfWork.Begin())
//{
var stu = new StudentEntity() { Name = $"{DateTime.Now.ToString()}你好" };
var data = await _repository.InsertAsync(stu);
//await uow.CompleteAsync();
return data;
//}
}
public async Task PostError()
{
throw new ApplicationException();
}
public async Task PostUserError()
{
throw new UserFriendlyException("直接爆炸");
}
public string Login()
{
var data = options.Value;
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(data.SecurityKey));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var claims = new List()
{
new Claim("name","admin")
};
var token = new JwtSecurityToken(
issuer: data.Issuer,
audience: data.Audience,
claims: claims,
expires: DateTime.Now.AddSeconds(60 * 60 * 2),
notBefore: DateTime.Now,
signingCredentials: creds);
string returnToken = new JwtSecurityTokenHandler().WriteToken(token);
return returnToken;
}
}
}