2017-11-01 4 views
1

Web API 2でマルチテナントアプリケーションを構築します。リクエストごとにURLにテナント情報を埋め込みます。例えば。 http://localhost/tenant1/api/test。 リクエストからテナントを抽出するアクションフィルタを追加しました。ただし、コントローラアクションメソッドのシグネチャに対応するパラメータがある場合にのみ機能します。 tenantは、唯一のアクションフィルタで使用されようとしているWeb API:コントローラアクションに対応する引数がない場合のルートパラメータの取得方法

[RoutePrefix("{tenant}")] 
public class TestController : ApiController 
{ 
    [Route("api/test")] 
    public string Get(string tenant) // we don't need it here 
    { 
     return "hello"; 
    } 
} 

ので、それぞれに追加して:コントローラはそのようなものであるとき、それはうまく動作し

public class ValidationFilter : ActionFilterAttribute 
{ 
    public override Task OnActionExecutingAsync(HttpActionContext actionContext, CancellationToken cancellationToken) 
    { 
     // works only if controller action has that argument 
     var tenant = actionContext.ActionArguments["tenant"]; 

     Console.Out.WriteLine("tenant = {0}", tenant); 
     return base.OnActionExecutingAsync(actionContext, cancellationToken); 
    } 
} 

:ここ

コードですすべてのコントローラーメソッドはばかげているようです。コントローラーアクションに対応する引数がない場合、アクションフィルターでその値を取得する方法はありますか?ちょうど質問を投稿した後

答えて

1

見つかり答え:)

actionContext.ControllerContext.RouteData.Values["tenant"] 

だけアクションがその引数を持っていない場合でも動作します。

関連する問題