2016-10-21 5 views
2

У меня есть проект веб-API с использованием OAuth/Owin для работы с аутентификацией.Owin OAuth Контекст: вход для входа в Frontend Json

Все работает нормально, когда я отправляю через форму-urlencoded. Но команда frontend отправит приложение/json, и я не смог изменить свой метод, чтобы получить этот Json.

Обычно я использую [FromBody], когда хочу получить Json, но на этот раз это не сработало.

Мой код:

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 Config:

 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 = wait 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.