ASP.NET Core5.0 WebApi和BlazorWebAssembly 博客后台管理系统
1,此项目是VS2019,Asp.NetCore5.0,用到Blazor,样式用到了bootstrap,数据库用到的MySQL数据库
项目实例图片,文章后面会**附上项目地址 下载地址
webapi端截图
![WebApi端](https://img-blog.csdnimg.cn/627b894f48cc4ad88974d3565e34ce71.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAdW5pdHlfWVRXSko=,size_20,color_FFFFFF,t_70,g_se,x_16)
Blazor Wasm端截图![在这里插入图片描述](https://img-blog.csdnimg.cn/68fdecf108d6473ebd8382e7ded44fc9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAdW5pdHlfWVRXSko=,size_18,color_FFFFFF,t_70,g_se,x_16#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/7b6421aef703430087b08235b1a7d8e4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAdW5pdHlfWVRXSko=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
2,项目结构和部分代码下(代码较多只粘贴部分,文章最后提供项目下载地址在这里插入代码片
)
![在这里插入图片描述](https://img-blog.csdnimg.cn/943ae122bc5e4d43bcb7cd31ee66aa06.png)
2.1 webapi端
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddDbContext<MyBlogDbContext>(option =>
{
option.UseMySql(Configuration["SqlConn"], MySqlServerVersion.LatestSupportedServerVersion);
});
services.AddScoped<IBlogModesServices, BlogModesServices>();
services.AddScoped<IBlogTypesServices, BlogTypesServices>();
services.AddScoped<IWriterInfoServices, WriterInfoServices>();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "Blog.Api", Version = "v1" });
#region Swagger想要使用鉴权需要注册服务的时候添加以下代码
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey,
Description = "直接在下框中输入Bearer {token}(注意两者之间是一个空格)",
Name = "Authorization",
BearerFormat = "JWT",
Scheme = "Bearer"
});
c.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference=new OpenApiReference
{
Type=ReferenceType.SecurityScheme,
Id="Bearer"
}
},
new string[] {}
}
});
#endregion
});
#region 注入jwt
services.AddCustomJWT();
#endregion
#region 注入AutoMapper
object p = services.AddAutoMapper(typeof(CustomAutoMapperProfile));
#endregion
#region 配置跨域请求
services.AddCors(options =>
{
options.AddPolicy("any", builder =>
{
builder.SetIsOriginAllowed(_ => true)
.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
});
});
#endregion
}
2.2,Wasm端
public static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.Services.AddHttpClient<IBlogModeServices, BlogModeServices>
(client => client.BaseAddress = new Uri("https://localhost:6001"));
builder.Services.AddHttpClient<IBlogTypeServices, BlogTypeServices>
(client => client.BaseAddress = new Uri("https://localhost:6001"));
builder.Services.AddHttpClient<IWriteInfoServices, WriteInfoServices>
(client => client.BaseAddress = new Uri("https://localhost:6001"));
builder.Services.AddBlazoredModal();
builder.Services.AddBlazoredLocalStorage();
var host = builder.Build();
await host.RunAsync();
}
2.3 jwt 校验
[Route("api/[controller]")]
[ApiController]
public class AuthorizationController : ControllerBase
{
private readonly IWriterInfoServices _IwriterInfoSerive;
public AuthorizationController(IWriterInfoServices iwriterInfoSerive)
{
_IwriterInfoSerive = iwriterInfoSerive;
}
[Produces("application/json")]
[HttpPost("Login")]
public async Task<ApiResult> Login([FromBody] WriterInfo DTouser)
{
string pwd = MD5Helper.GenerateMD5(DTouser.UserPwd);
string useraccount = DTouser.UserAccount;
var writer = await _IwriterInfoSerive.FindAsync(useraccount, pwd);
if (writer != null)
{
var claims = new Claim[]
{
new Claim("UserAccount", writer.UserAccount),
new Claim ("Id",writer.Id.ToString()),
new Claim ("UserName",writer.UserName)
};
var key = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes("SDMC-CJAS1-SAD-DFSFA-SADHJVF-VF"));
var token = new JwtSecurityToken(
issuer: "http://localhost:5000",
audience: "http://localhost:6000",
claims: claims,
notBefore: DateTime.Now,
expires: DateTime.Now.AddHours(1),
signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256)
);
var jwtToken = new JwtSecurityTokenHandler().WriteToken(token);
return ApiResultHelper.Success(jwtToken);
}
return ApiResultHelper.Error("登录失败-账号密码错误");
}
}
3,项目下载地址
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)