У меня есть класс промежуточного программного обеспечения, который читает файлы cookie пользователя и проверяет их, а затем перенаправляет на URL-адрес входа в систему, если они недействительны или отсутствуют.URL, на который перенаправляется пользователь, содержит параметр «назад».Это промежуточное ПО прекрасно работает в SPA со статическим файлом, и когда приложение не является вложенным приложением в IIS.
Мой вопрос, это не работает при использовании контроллеров MVC и представлений, пока пользователь не будет перенаправлен наНа странице входа каким-либо образом путь (который указывает на вложенный сайт IIS) удаляется, а обратный URL-адрес не содержит URL-пути.Есть идеи?
Что происходит
Перейти к -> http://test.com/mysite
Перенаправляет на -> http://login.com? Назад = http://test.com
Что должно произойти
Перейти к -> http://test.com/mysite
Перенаправляет на -> http://login.com? Назад = http://test.com/mysite
public class MyMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger _logger;
private readonly IOptions<MyMiddlewareOptions> _options;
public MyMiddleware(RequestDelegate next, IOptions<MyMiddlewareOptions> options, ILoggerFactory logger)
{
_next = next;
_options = options;
_logger = logger.CreateLogger("My Middleware");
}
public async Task Invoke(HttpContext context)
{
var middlewareCookieValidator = context.RequestServices.GetService<IMiddlewareCookieValidator>();
await new CookieRequestCultureProvider().DetermineProviderCultureResult(context);
if (!_options.Value.Bypass && !Path.HasExtension(context.Request.Path.Value))
{
try
{
if (wslCookieValidator.HasCreatedCookies(context) || await middlewareCookieValidator.ValidateCookiesAsync())
{
context.Response.OnStarting(async () => await middlewareCookieValidator.GenerateAndApplyCookiesToResponse(context));
await _next(context);
}
else
{
var location = new Uri($"{context.Request.Scheme}://{context.Request.Host}{context.Request.Path}{context.Request.QueryString}");
context.Response.Redirect($"{_options.Value.Url}?back={location}");
}
}
catch (Exception exception)
{
throw new Exception($"RequestDelegate '_next' = {_next}. {exception.Message}");
}
}
else
{
await _next(context);
}
}
}
}