我将用户凭据从Web应用程序发布到web api,后者实现了对用户进行身份验证并使用有效令牌进行响应的提供程序 .
这是发布的方法:
public TokenModel RequestAPIToken(string username, string password)
{
var postData = new Dictionary();
postData.Add("grant_type", "password");
postData.Add("username ", username);
postData.Add("password ", password);
HttpContent content = new FormUrlEncodedContent(postData);
_response = _client.PostAsync("token", content).Result;
var result = _response.Content.ReadAsAsync().Result;
return result;
}
这取自web api项目:
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
var _userServices = new UserServices();
User user = _userServices.GetValidatedUser(context.UserName, context.Password).FirstOrDefault();
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
identity.AddClaim(new Claim("userId", user.UserId.ToString()));
identity.AddClaim(new Claim("username", user.Username.ToString()));
context.Validated(identity);
}
问题是context.UserName和context.Password总是为null!我尝试使用键值对而不是dictinary而我正在使用_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(“application / x-www-form-urlencoded”));
有什么建议吗?