2016-09-17 9 views
2

/トークンからの応答は次のようになりますペイロードを返します。Web Apiベアラートークンの名前を ".expires"キーに変更する方法はありますか。

"access_token":"foo", 
"token_type":"bearer", 
"expires_in":59, 
"refresh_token":"bar", 
".issued":"Sat, 17 Sep 2016 00:13:21 GMT", 
".expires":"Sat, 17 Sep 2016 00:14:21 GMT" 

は.issued理由があると彼ら彼らは道の名前.expired?これらは有効なJavaScriptプロパティではないため、名前を変更します。そこにあれば、このようTokenEndpointメソッドをオーバーライドする以外に、これを行うために、よりエレガントな方法:

public override Task TokenEndpoint(OAuthTokenEndpointContext context) 
{ 
    foreach (KeyValuePair<string, string> property in context.Properties.Dictionary) 
    { 
     string key = property.Key; 
     switch (key) 
     { 
      case ".expires": 
       key = "expires"; 
       break; 
      case ".issued": 
       key = "issued"; 
       break; 
     } 
     context.AdditionalResponseParameters.Add(key, property.Value); 
    } 
    return Task.FromResult<object>(null); 
} 

私はこれをしたい理由の一例。私は、リクエストから受け取ると予想されるデータを模倣するTypeScriptインターフェイスを提供するのが好きです。この場合、私のインターフェイスは次のようになります。私のAPIでプロパティを変更することなく、

interface IToken { 
    .expires: string;  // Not valid TypeScript 
    .issued: string;   // Not valid TypeScript 
    access_token: string; 
    expires_in: number; 
    token_type: string; 
    refresh_token: string; 
} 

、私と私のAPIを使用して他の人がtokenVar[".expires"]

答えて

1

のような魔法の文字列を使用して、これらのプロパティにアクセスすることを余儀なくされている私にはありませんそれを行う特別な理由があると思う。これはもう一つの定数です。ここでAuthenticationProperties.csを参照してくださいhttps://github.com/jchannon/katanaproject/blob/master/src/Microsoft.Owin/Security/AuthenticationProperties.cs

TokenEndpointメソッドをオーバーライドするコードのように、それについては最も良い方法です。

+0

私はこれをやりたい理由の例を提供するために私の質問を編集しました。 –

+0

はい、私はその部分を理解しましたが、あなたが既にやっていることについては、 'TokenEndpoint'を上書きすることが唯一の方法だと言いました。 –