2013-11-13 4 views
4

Я строию проект Web API (2) и пользуюсь "individual account" authentication. Я хочуКак расширить asp.net web api 2 пользователя?

  1. продлить пользователь с некоторыми деталями (например, первым именем/фамилией и т.д.)(in model)
  2. получает, что данные после авторизации (на стороне клиента - мой случай окно телефона)

Я только начал изучать MVC и Web API, так может ли кто-нибудь помочь мне в этом?

Позвольте мне объяснить немного: У меня есть создать WebAPI проект и выбран в качестве метода проверки подлинности - «inidividual счета» хорошо я добавил класс модели под названием Человек с 2-мя полями: FirstName и LastName. Ну, я использовал скрипач, чтобы зарегистрировать пользователя с именем «johndoe» с паролем. После этого я использовал fiddler для аутентификации этого пользователя на «server: port/Token» и получил токен на предъявителя. Ну вот проблема, мне нужно знать, как связать этот пользовательский класс с моим классом Person в модели, а во-вторых, я не знаю, как написать контроллер, поэтому, когда вы отправите запрос на получение, наша функция контроллера вернет связанное Личность.

ответ

11

Во-первых, как и в: Introduction to ASP.NET Identity

По умолчанию, система хранит ASP.NET Идентичность всю информацию о пользователе в базе данных. Идентификатор ASP.NET использует Entity Framework Code Сначала для реализации всего механизма сохранения.

Теперь класс IdentityUser будет отображен AspNetUsers таблицы в базе данных, так что позволяет продлить его создать новый класс, который наследует от него и добавить свои собственные свойства:

public class CustomUser : IdentityUser 
{ 
    public string Email { get; set; } 
} 

Тогда вы должны позволить класс UserManager использовать CustomUser вместо IdentityUser класса, поэтому в Startup.cs, изменить общий тип для UserManager и UserStore быть похожим:

UserManagerFactory =() => new UserManager<CustomUser>(new UserStore<CustomUser>()); 

также свойство:

public static Func<UserManager<CustomUser>> UserManagerFactory { get; set; } 

В ApplicationOAuthProvider.cs и в любом месте вашего решения выполните те же самые изменения для универсального типа для UserManager и начните использовать CustomUser вместо IdentityUser. Вы можете добавить новое свойство "Электронная почта" в RegisterBindingModel как:

public class RegisterBindingModel 
{ 
    [Required] 
    [Display(Name = "User name")] 
    public string UserName { get; set; } 

    [Required] 
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string Password { get; set; } 

    [DataType(DataType.Password)] 
    [Display(Name = "Confirm password")] 
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 
    public string ConfirmPassword { get; set; } 

    public string Email { get; set; } 
} 

Тогда при регистрации вы можете добавить значение:

CustomUser user = new CustomUser 
     { 
      UserName = model.UserName, 
      Email=model.Email 
     }; 

Я надеюсь, что это поможет

UPDATE

Если у кого-то есть ExceptionMessage «Недопустимое имя столбца« Дискриминатор ».«это означает, что« AspNetUsers »уже создан до выполнения моих шагов, и в таблице нет столбца« Дискриминатор », поэтому все, что вам нужно сделать, - это база данных, изменить дизайн таблицы AspNetUsers, добавив новый столбец с введите nvarchar (128) (Также добавьте новый столбец, который вы хотите иметь, например, «Электронная почта» в моем примере) и назовите его «Дискриминатор», и не забудьте заполнить поля этого столбца для старых записей соответствующим значением (в мой пример будет CustomUser).

+1

Я получаю исключение из ExceptionMessage «Недопустимое имя столбца« Дискриминатор ».» :( – Fred

+0

@Fred вы решили эту ошибку дискриминации? Я получаю ее сейчас :( – lawphotog

+0

@Laurence Nyein Не могли бы вы объяснить мне, когда вы получили это исключение, и в каком контроллере? –

Смежные вопросы