我正在尝试在现有的ASP.Net Identity数据库上构建新的Web API。我正在遵循基本的Web API教程,并在Microsoft网站上的VS2017中创建一个新项目。
https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/individual-accounts-in-web-api
我想用这个新的Web API实现oAuth;但是,当我对包含现有用户名/密码的http://localhost:12345/TOKEN URL进行POST时,ApplicationUserManager FindAsync 方法会引发错误,告诉我类型转换无效。 / p>
从实例化的“ System.Int32”类型到“ System.String”类型的指定强制转换无效。
这是我要发送的POST:
$("button").click(function(){
var loginData = {
grant_type: 'password',
username: 'user@somewhere.com',
password: 'password'
};
$.ajax({
type: 'POST',
url: 'http://localhost:12345/Token',
data: loginData
}).done(function (data) {
self.user(data.userName);
// Cache the access token in session storage.
sessionStorage.setItem(tokenKey, data.access_token);
});
});
这是C#端
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();
ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);
//Rest omitted for readability
}
我将VS2017创建的AspNetUsers数据库表与我要使用的现有数据库进行了比较,除了ID列之外,AspNetUsers表在列名和数据类型方面都匹配。我们现有的数据库使用INT,而自动创建的数据库使用ncvarchar。我以为这是差异,但是我不确定为什么它们的架构最初不会匹配。
是否有一种方法可以更改应用程序用户管理器期望的数据类型,以便它不查找该nvarchar?