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

时间:2019-02-07 06:30:44

标签: routing httpclient middleware pipeline blazor

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

问题是:

我如何使我的服务器同时响应Blazor个调用并将请求管道用于api个调用?

代码

服务器启动

public void Configure(IApplicationBuilder app)
        {

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

PS 在以下代码中,我可以访问Blazor路由,但不能访问apiRoute。 考虑到我要创建管道,是否有办法使这项工作有效?

我将pipeline之前和之后的app.UseBlazor都没有用,只是不会被击中。

更新

很明显,我在middleware的陪同下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(....)

2 个答案:

答案 0 :(得分:1)

尝试一下:

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

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

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

答案 1 :(得分:0)

很明显,我在//div[contains(@class,"threadlist_lz") and contains(@class, "clearfix")]/div/a[contains(@class,"j_th_tit")]/@href 的陪同下middleware进行了以下约束:

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

  2. 对于自定义Blazor来说,扩展名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(...);