2016-10-21 22 views
2

我有一個使用OAuth/Owin處理身份驗證的Web API項目。Owin OAuth上下文:前端登錄發送Json

當我通過form-urlencoded發佈時,一切正常。但前端團隊將發佈應用程序/ json,並且我無法更改我的方法來接收此Json。

當我想要接收Json時,我通常會使用[FromBody],但這次它不工作。

我的代碼:

public override async Task ValidateClientAuthentication([FromBody]OAuthValidateClientAuthenticationContext context) 
    { 
     context.Validated(); 
    } 

    public override async Task GrantResourceOwnerCredentials([FromBody]OAuthGrantResourceOwnerCredentialsContext context) 
    { 
     try 
     { 
      .... 
     } 
     catch (Exception e) 
     { 
      context.SetError("invalid_grant", "User not found"); 
     } 
    } 
} 

我的OAuth配置:

 public static void ConfigureOAuth(IAppBuilder app, IContainer container) 
    { 
     OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions() 
     { 
      AllowInsecureHttp = true, // HTTPS == false 
      TokenEndpointPath = new PathString("/security/login"), 
      AccessTokenExpireTimeSpan = TimeSpan.FromHours(2), 
      Provider = container.Resolve<IOAuthAuthorizationServerProvider>()     
     }; 

     app.UseOAuthAuthorizationServer(OAuthServerOptions); 
     app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 
    } 

的Json實施例:

{grant_type: 「密碼」,用戶名:「爲myuser」密碼: 「爲mypass」}

+0

你可以閱讀你的json表單請求。 dynamic obj = await Request.Content.ReadAsAsync (); – Eins

回答

0

閱讀請求主體由

context.Request.Body.Position = 0; // this resets the read position to 0 
var payload = await new StreamReader(context.Request.Body).ReadToEndAsync(); 

從這裏,你有你的JSON對象的字符串。您可以使用反序列化器將其轉換爲CLR類型。