C# Owin OAuth上下文:前端登录发送Json

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

我有一个Web API项目,使用OAuth/Owin处理身份验证

当我通过表单发布时,一切都很好。但是前端团队将发布application/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");
        }
    }
}
        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();