Как заполняются OwinContext.Request.Path и PathBase?
Я пишу свое собственное промежуточное ПО OWIN для потока кода авторизации OpenID Connect, основанного на других примерах в Проекте Katana.
В рамках этого я должен создать пару URI, например, URI перенаправления и URL-адрес возврата.
Другие примеры в Katana делают это путем объединения частей из текущего запроса, например, в CookieAuthenticationHandler
loginUri =
Request.Scheme +
Uri.SchemeDelimiter +
Request.Host +
Request.PathBase +
Options.LoginPath +
new QueryString(Options.ReturnUrlParameter, currentUri);
Мой вопрос заключается в том, какие правила определяют то, что заканчивается в двух свойствах пути:
OwinContext.Request.Path
OwinContext.Request.PathBase
Я попытался проверить эти свойства, поскольку запрос проходит через различные обработчики в конвейере ниже, для запроса:
"https://localhost/Client/login" // Where Client is a virtual directory in IIS
Результат:
В сопоставленном обработчике для / login, PathBase = "/ Client / Login".Но когда запрос попадает в метод ApplyResponseChallengeAsync в моем QuillCodeFlowHandler на пути возврата для того же запроса, PathBase = "/ Client" и Path = "/ Login".Таким образом, не зная «правил» для того, как эти значения заполняются, а затем изменяются, трудно создать URI, используя их. Если кто-нибудь может объяснить, будет высоко ценится.
Выдержка из моего конфига:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = CookieAuthenticationDefaults.AuthenticationType,
LoginPath = new PathString("/Login")
});
app.UseQuillCodeFlowAuthentication(new QuillCodeFlowOptions());
app.Map("/login", map =>
{
map.Run(async ctx =>
{
if (ctx.Authentication.User == null ||
!ctx.Authentication.User.Identity.IsAuthenticated)
{
var authenticationProperties = new AuthenticationProperties();
[...]
ctx.Authentication.Challenge(authenticationProperties,
QuillCodeFlowDefaults.AuthenticationType);
OWIN спецификация дает некоторое объяснение, и метод Microsoft.Owin.Host.HttpListener.GetPathAndQuery, кажется, является тем, где переменные пути установлены первоначально.