Почему пользовательское промежуточное ПО все еще работает? - PullRequest
1 голос
/ 12 марта 2020

Платформа

. Net Core 2.2 Web App

Сценарий

Я написал несколько пользовательских промежуточных программ с намерение быть выполненным только тогда, когда мой путь запроса совпадает с указанным местоположением. Когда он запускается, он выполняет поиск в базе данных и проверяет часть данных. При определенных обстоятельствах промежуточное ПО будет перенаправлять пользователя на новый URL-адрес вместо того, чтобы позволить ему просмотреть запрашиваемый URL.

Проблема

Кажется, что промежуточное ПО кэшировано или что-то в этом роде , Я не понимаю это Когда я запрашиваю localhost:6000/url-that-should-work, я волшебным образом получаю не ту страницу с другим URL. Однако, когда я использую Fiddler, это не редирект. Как будто это страница, которую я на самом деле просил. Странная часть в том, что а) мой код промежуточного программного обеспечения закомментирован в Startup.cs и б) когда я go перешел в режим инкогнито, поведение работает, как и ожидалось. Кроме того, если я изменяю порт отладки на что-то другое, это также работает. Кроме того, когда я устанавливаю точку останова в моем промежуточном программном обеспечении, если я go до /url-that-should-work, путь запроса является неправильным URL.

Код

Запуск. cs

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();

//app.UseEndpointRouting();
//app.UseWhen(context => context.Request.Path.StartsWithSegments("/move/booking"), appBuilder =>
//{
//    appBuilder.UseMoveBookingWorkflowPermission();
//});

app.UseMvc();

Линия перенаправления промежуточного программного обеспечения, которая не должна выполняться

context.Response.Redirect(context.Request.PathBase + previousPath + context.Request.QueryString, true);

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Это один из тех моментов "я тупой". Проблема заключалась в том, что когда я перенаправлял ответ, я указывал, что хочу, чтобы он был постоянным.

Старый

context.Response.Redirect(context.Request.PathBase + previousPath + context.Request.QueryString, true);

Новый

context.Response.Redirect(context.Request.PathBase + previousPath + context.Request.QueryString, false);
0 голосов
/ 14 марта 2020

Согласно. Net Базовая документация

Порядок промежуточного программного обеспечения может изменить их функциональность , безопасность и производительность .

Например, в этой конфигурации на Startup.cs

public void Configure(IApplicationBuilder app)
{

app.UseStaticFiles();

app.UseResponseCompression();

app.UseEndpoints(endpoints =>
{
    endpoints.MapRazorPages();
});
}

Stati c файлы не сжимаются с этим порядком промежуточного программного обеспечения. Ответы Razor Pages могут быть сжаты. Этот простой пример показывает, как изменится функциональность. Упорядочение имеет значение в методе Configure. Он может либо сделать ответ, либо передать запрос следующему элементу промежуточного программного обеспечения.

Если проблема не устранена, вы можете переписать промежуточное программное обеспечение URL.

var options = new RewriteOptions()
.AddRewrite(//some options);
app.UseRewriter(options);

Надеюсь, это поможет!

...