2017-07-17 21 views
1

Apacheは書き換えられたURLに基​​づいて提供するファイルを選択しますが、元のURLはスクリプトに渡されます。Kestrelで書き直した後の元のURLを取得

Kestrelは、書き換えられたURLをパイプラインに渡します(HttpContext.Request.Pathからアクセス可能)。

ミドルウェアから書き直して元のURLにアクセスすることはできますか?

+3

ミドルウェアを作成し、パイプラインで(HttpContext.Itemsやその他の手段で)パイプラインに渡してください。 – Tseng

答えて

0

@Tsengから発行された指示に従います。私のテストはRewriteMiddlewareをラップしますが、別のミドルウェアが必要な場合があります。

public class P7RewriteMiddleware 
{ 
    private RewriteMiddleware _originalRewriteMiddleware; 

    public P7RewriteMiddleware(
     RequestDelegate next, 
     IHostingEnvironment hostingEnvironment, 
     ILoggerFactory loggerFactory, 
     RewriteOptions options) 
    { 
     _originalRewriteMiddleware = new RewriteMiddleware(next, hostingEnvironment, loggerFactory, options); 
    } 

    /// <summary> 
    /// Executes the middleware. 
    /// </summary> 
    /// <param name="context">The <see cref="HttpContext"/> for the current request.</param> 
    /// <returns>A task that represents the execution of this middleware.</returns> 
    public new Task Invoke(HttpContext context) 
    { 
     var currentUrl = context.Request.Path + context.Request.QueryString; 
     context.Items.Add("original-path", currentUrl); 
     return _originalRewriteMiddleware.Invoke(context); 
    } 
} 

その後、私の認証フィルタで使用されます。

if (spa.RequireAuth) 
{ 
    context.Result = new RedirectToActionResult(Action, Controller, 
     new { area = Area, returnUrl = context.HttpContext.Items["original-path"] }); 
} 
関連する問題