使服务器使用请求管道以及接受 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
一起工作,但有以下限制:
在请求管道中使用 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
)的请求,虽然我仍然没有回复 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
一起工作,但有以下限制:
在请求管道中使用 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(...);
这有效:
app.Use(async(x,con)=>{
app.Map(route1,...);
app.Map(route2....);
});
app.UseBlazor(....)
我正在使用 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
一起工作,但有以下限制:
在请求管道中使用
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
)的请求,虽然我仍然没有回复 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
一起工作,但有以下限制:
在请求管道中使用
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(...);
这有效:
app.Use(async(x,con)=>{
app.Map(route1,...);
app.Map(route2....);
});
app.UseBlazor(....)