Я использую 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, но безрезультатно. Он просто не попадет.
Обновлять
Очевидно, я заставил 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(....)
Я запустил код без использования промежуточного программного обеспечения и получил ту же ошибку. Метод в клиенте просто выполняет POST (с объектом) на сервере, используя HttpClient по указанному маршруту.





Попробуй это:
Удалить app.Map("/route", (x => { --- }
И измените свой код на что-то вроде этого:
var response = await this.client.PostAsync("/route",
content);
Итак, вы говорите, что я не могу использовать промежуточное программное обеспечение/конвейеры (app.Map) при использовании Blazor?
Очевидно, я заставил 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(...);
и это работает:
app.Use(async(x,con)=>{
app.Map(route1,...);
app.Map(route2....);
});
app.UseBlazor(....)
Что должен делать этот код, и запускали ли вы сначала свое приложение без него: app.Map("/route", (x => { --- }