使服务器使用请求管道以及接受 Blazor 调用

Making server use request pipelines along with accepting Blazor calls

我正在使用 browser 托管的 Blazor,在我的 server 项目中我想使用额外的 middleware

问题是:

如何让我的服务器既响应 Blazor 调用又使用请求管道进行 api 调用?

代码

服务器启动

public void Configure(IApplicationBuilder app)
        {

        app.UseBlazor<Client.Startup>();
        app.Map("/apiRoute", x => {
            Console.WriteLine("got here");
        });

P.S 在下面的代码中,我可以访问 Blazor 路由,但我无法访问 apiRoute。 考虑到我想创建管道,有没有办法使这项工作正常进行?

我把pipeline放在app.UseBlazor前后都没有avail.It就不会被击中。

更新

显然我让 middleware-s 与 Blazor 一起工作,但有以下限制:

  1. 在请求管道中使用 Blazor 之前使用中间件

  2. 对于自定义 routes ,扩展名 app.Map(route,x=>...) 似乎不适用于 Blazor 所以我不得不将它包装在 app.Use 扩展名中.

代码

public void Configure(IApplicationBuilder app, IHostingEnvironment env) {

            app.UseDeveloperExceptionPage();


            app.Use(async (con, next) => {
                app.Map("/myCustomRoute", f => {
                    app.Use(async (c, n) => {
                        await con.Response.Body.WriteAsync(Encoding.UTF8.GetBytes("asa"));
                    });
                });
            });
            app.UseBlazor<Client.Startup>();
        }

使用上面的代码,我可以访问 Blazor 页面以及从 Postman 发送指定路由(在我们的例子中是 myCustomRoute)的请求,虽然我仍然没有回复 Postman。 我仍然不明白的是为什么我不能分支我的管道 (app.Map) 并接下来使用 Blazor 扩展,因为它们是不同的问题。

示例
为什么这不起作用:

    app.Map("myroute1",...);
    app.Map("myroute2",...);
    app.UseBlazor(...);

这有效:

  app.Use(async(x,con)=>{
                  app.Map(route1,...);
                  app.Map(route2....);
               });
  app.UseBlazor(....)

试试这个:

移除 app.Map("/route", (x => { --- }

并将您的代码更改为如下内容:

var response = await this.client.PostAsync("/route",
                                   content);

显然我让 middleware-s 与 Blazor 一起工作,但有以下限制:

  1. 在请求管道中使用 Blazor 之前使用中间件

  2. 对于自定义 routes ,扩展名 app.Map(route,x=>...) 似乎不适用于 Blazor 所以我不得不将它包装在 app.Use 扩展名中.

代码

 public void Configure(IApplicationBuilder app, IHostingEnvironment env) {

            app.UseDeveloperExceptionPage();


            app.Use(async (con, next) => {
                app.Map("/myCustomRoute", f => {
                    app.Use(async (c, n) => {
                        await con.Response.Body.WriteAsync(Encoding.UTF8.GetBytes("asa"));
                    });
                });
            });
            app.UseBlazor<Client.Startup>();
        }

如果我访问 Blazor 页面并从 Postman 发送指定路由上的请求(在我们的例子中是 myCustomRoute),则上述代码有效。 我仍然不明白的是为什么我不能分支我的管道 (app.Map) 并接下来使用 Blazor 扩展,因为它们是不同的问题。

示例
为什么这不起作用:

app.Map("myroute1",...);
app.Map("myroute2",...);
app.UseBlazor(...);

这有效:

 app.Use(async(x,con)=>{
              app.Map(route1,...);
              app.Map(route2....);
           });
 app.UseBlazor(....)