Расширение данных о пользователе в Asp.net Web Api 2?

Заранее прошу прощение за глупый вопрос, но так как я взялся изучать MVC и WebApi он всё-таки возник.
Я создал проект на MVC Web Api (версия 2 и Visual Studio 2013). В настройках проекта указал "individual accounts" для аутентификации. С этим вопросов не возникло, регистрация, вход и все остальные операции работают нормально. Теперь - я создал новый клас в модели и назвал его Person (ну и контролер соответственно), теперь я хочу привязать пользователя ( а хотелось бы чтобы это происходило при регистрации) с конкретным Person. Вот здесь я без понятия вообще куда смотреть. Второй вопрос в тему это как потом получить данные из Person в зависимости от того что вошёл в систему. Ну и третий вопрос как заставить систему аутентификации просить не просто username для регистрации пользователя, а email адрес.

На данный момент я пока сделал так:
1. Для связки пользователя с Person

а. добавил поле public string AppUserName { get; set; } в Person
б. изменил немного POST в контролере на:
// POST api/Person
        [ResponseType(typeof(Person))]
        [Route("api/RegisterPersonForUser")]
        [Authorize]
        public IHttpActionResult PostPerson(Person person)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }
            var result = (from p in db.People where p.AppUserName == User.Identity.Name select p).ToList();
            if (result.Count > 0)
            {
                return StatusCode(HttpStatusCode.NotAcceptable);
            }

            person.AppUserName = User.Identity.Name;
            db.People.Add(person);
            db.SaveChanges();
            return CreatedAtRoute("DefaultApi", new { id = person.Id }, person);
        }


то есть клиент после регистрации вызывает "это" и создаёт Person для аутентифицированного пользователя. Считаю это плохим потому что при следующих запросах от клиента я должен буду в каждом запросе на сервере проверять если к пользователю был привязан Person так как доверия к клиенту нет. Это не есть гуд

2. Для того чтобы получить инфу о привязанном Person, добавил новый GET в контроллер Person:

[Authorize]
        [Route("api/GetUserInfo")]
        public IHttpActionResult GetAssociatedPersonId()
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            var result = (from p in db.People where p.AppUserName == User.Identity.Name select p).ToList();
            if(result.Count > 0)
            {
                Person person = result[0];
                return CreatedAtRoute("DefaultApi", new { id = person.Id }, person);
            }
            
            return StatusCode(HttpStatusCode.NoContent);
        }


на а на третий вопрос я всё-таки не знаю куда смотреть. И вообще мне кажется, что это неправильно. Подскажите как правильно это всё сделать или хотя бы укажите куда смотреть.
  • Вопрос задан
  • 3463 просмотра
Пригласить эксперта
Ответы на вопрос 2
foxmuldercp
@foxmuldercp
Системный администратор, программист, фотограф

Для начала пройдите вводный курс по MVC3/4/5, это займёт у Вас не так много времени, как кажется - там простенькие веб приложения вроде магазина музыки. Потом почитайте про новую авторизацию в MVC5 и о том, как свойства пользователя "расширять" новыми полями.

Посмотрите, как это работает на практике (работает, проверял) на том же демо проекте вроде магазина музыкальных дисков и только потом начинайте развлекаться с WebApi, дописывая функционал

Ответ написан
Комментировать
Bl00dra1n
@Bl00dra1n Автор вопроса

Уже всё сделал, и в MVC 5 Web Application всё получается, а вот web api template немного посторен по другому, и я вот не могу врубится

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы