Blazor client-side + webapi (.net core 3.1) 添加jwt验证流程(非host)第一步

第一步,设置并检查CROS跨域请求

因为我们并不打算将Blazor 由webapi来进行host,所以Blazor和api将是两个域名,这样操作即方便以后单独使用Blazor来写前端,但后端采用已有或其他语言框架或版本的api。

这也是我接下来项目的打算。

 准备工作,生成项目:

  这里使用的是.Net CLI,即命令行,这样方便将前后端都运行进行测试。

  1. cd到文件夹(你自己创建)

  2.dotnet new sln -n AuthApiAndBlazor  (这步用来生成解决方案)

  3.dotnet new blazorwasm -n client (生成Blazor client-side)

  4.dotnet new webapi -n server (生成Api)

  5.打开AuthApiAndBlazor.sln 解决方案,并添加前两个我们刚创建好的项目。

 

完成准备工作后,打开server(api)的Startup.cs,我们需要添加CROS设置,请看下面代码,其他代码我已经省略,请勿直接全部复制!否则你项目就gg了

 

    public class Startup
    {
        //其他代码.....
        
        readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";


        public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(options =>
            {
                options.AddPolicy(MyAllowSpecificOrigins,
                builder =>
                {
            //替换成你Blazor wasm(client)的域名 builder.WithOrigins(
"http://localhost:5001").AllowAnyHeader().AllowAnyMethod(); }); });
//其他代码....... } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseRouting(); //添加CORS到管道中,记得一定要放在UseRouting和UseEndpoints之间,否则没用 app.UseCors(MyAllowSpecificOrigins); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } }

 

接下来,打开客户端 client (blazor wasm) 的Pages/FetchData.razor ,由于.net core 3.1的模板中,有一个天气信息页面,几乎是全模板同步,他们的类也是相同的(你也可以自己检查下WeatherForecast.cs

我们将42行的代码改一下,将从本地读取json信息,改为调用api读取。

 

    protected override async Task OnInitializedAsync()
    {
        forecasts = await Http.GetJsonAsync<WeatherForecast[]>("https://localhost:5002/weatherforecast");
    }

 

这里的域名请替换成api的域名,如果你没有修改将会导致Blazor和webapi使用同一端口,将会导致无法运行。

这时候用命令行启动server (记得先生成项目,命令:dotnet build,又或者用vs生成)


再启动你的client,这时候选择Fetch Data,你就可以看到从api调取的数据被展示了

 

 

posted @ 2020-02-21 21:22  SimplerJiang  阅读(785)  评论(0编辑  收藏  举报