C# Owin OAuth上下文:前端登录发送Json
我有一个Web API项目,使用OAuth/Owin处理身份验证 当我通过表单发布时,一切都很好。但是前端团队将发布application/json,我无法更改我的方法来接收这个json 当我想要接收Json时,我通常使用[FromBody],但这次不行 我的代码:C# Owin OAuth上下文:前端登录发送Json,c#,json,asp.net-web-api,oauth,owin,C#,Json,Asp.net Web Api,Oauth,Owin,我有一个Web API项目,使用OAuth/Owin处理身份验证 当我通过表单发布时,一切都很好。但是前端团队将发布application/json,我无法更改我的方法来接收这个json 当我想要接收Json时,我通常使用[FromBody],但这次不行 我的代码: public override async Task ValidateClientAuthentication([FromBody]OAuthValidateClientAuthenticationContext conte
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");
}
}
}
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());
}
我的OAuth配置:
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");
}
}
}
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());
}
publicstaticvoid配置OAuth(IAppBuilder应用程序,IContainer容器)
{
OAuthAuthorizationServerOptions OAuthServerOptions=新的OAuthAuthorizationServerOptions()
{
AllowInsecureHttp=true,//HTTPS==false
TokenEndpointPath=新路径字符串(“/security/login”),
AccessTokenExpireTimeSpan=TimeSpan.FromHours(2),
Provider=container.Resolve()
};
使用OAuthAuthorizationServer(OAuthServerOptions);
使用OAuthBeareAuthentication(新的OAuthBeareAuthenticationOptions());
}
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");
}
}
}
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());
}
{grant_type:“password”,username:“myuser”,password:“mypass”}
在请求正文中阅读
context.Request.Body.Position = 0; // this resets the read position to 0
var payload = await new StreamReader(context.Request.Body).ReadToEndAsync();
从这里可以得到JSON对象的字符串。您可以使用反序列化程序将其转换为CLR类型。您可以读取json表单请求。dynamic obj=wait Request.Content.ReadAsAsync();