2016-09-03 11 views
1

サービスに送信されたHTTPヘッダーに基づいて、さまざまなコントローラーに要求をルーティングしようとしています。私Configure方法でASP.NETコアのヘッダーベースのルーティング

、私は

app.MapWhen(ctx => !string.IsNullOrWhiteSpace(ctx.Request.Headers["Magic"]), DoStuff); 

私の問題は、私は

private static void DoStuff(IApplicationBuilder app) 
{ 
    /// ?!? \\\ 
} 

理想的ルートをコントローラを指定し、あるいは変更する方法が分からないということである持っている、私はそれをみたいですMagic: Missileが送信された場合は、ルートを書き換えるには/Missile

答えて

4

私は最終的にtを打つ前にuriを書き直すカスタムミドルウェアを作成しました彼はmvc層。うまく動作します!

public Task Invoke(HttpContext context) 
{ 
    const string apiPath = "/api"; 

    var magic context.Request.Headers["Magic"]; 

    if (string.IsNullOrWhiteSpace(magic)) 
    { 
     return _next.Invoke(context); 
    } 

    var path = context.Request.Path.ToUriComponent(); 

    if (!path.StartsWith(apiPath)) 
    { 
     return _next.Invoke(context); 
    } 

    path = string.Concat(path.Skip(apiPath.Length)); 
    path = $"{apiPath}/{magic}{path}"; 
    context.Request.Path = path; 

    return _next.Invoke(context); 
} 
関連する問題