Я пытаюсь создать новый веб-API на существующей базе данных ASP.Net Identity.Я следую основному руководству по веб-API и создаю новый проект в VS2017, который можно найти на сайте Microsoft.
https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/individual-accounts-in-web-api
Я хотел бы реализовать oAuth с помощью этого нового веб-API;однако когда я выполняю POST для URL-адреса http://localhost:12345/TOKEN, который содержит имя пользователя / пароль существующего пользователя, метод ApplicationUserManager FindAsync выдает ошибку, сообщающую, что преобразование типа недопустимо.
Указанное приведение из материализованного типа 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
}
Я сравнил таблицы базы данных AspNetUsers, которые VS2017 создает, с нашей существующей базой данных, которую я хочу использовать, и таблицы AspNetUsers соответствуют с точки зренияимена столбцов и типы данных, за исключением столбца Id.Наша существующая БД использует INT, а созданная автоматически использует ncvarchar.Я предполагаю, что это несоответствие, но я не уверен, почему их схемы не будут совпадать с самого начала.
Есть ли способ изменить тип данных, который ожидает диспетчер пользователей приложения, поэтому он не ищет этот nvarchar?