我正在使用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
进行了以下约束:
在请求管道中使用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(....)
答案 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
进行了以下约束:
在请求管道中使用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(...);