WEB API - как добавить значение к пользовательскому свойству в User, используя идентификатор - PullRequest
0 голосов
/ 29 августа 2018

Используя Identity с WEB API, я создал несколько пользователей, которые сохранены в База данных SQL. Я добавил пользовательское свойство (ShippingAddress) к свойствам по умолчанию, которые поставляются вместе с таблицей User, созданной с помощью Identity.

Когда я создаю пользователя, я добавляю имя пользователя, адрес электронной почты и пароль для создания пользователя. Я хочу, чтобы адрес доставки был добавлен позже.

Мне нужно добавить адрес доставки пользователю, который в данный момент вошел в систему. (У меня нет проблем при входе или выходе).

Вот что я пробовал:

Когда я нажимаю эту кнопку, я получаю имя пользователя в окне предупреждения, которое в данный момент зарегистрировано. Это работает.

 <button id="GetUserName">GetUserName</button>

 $('#GetUserName').click(function () {
        $.ajax({
                url: 'GetUserName',
                method: 'GET',
                headers: {
                    'Authorization': 'Bearer '
                        + sessionStorage.getItem("accessToken")
                },
                success: function (data) {
                    alert(data);
                },
                error: function (jQXHR) {
                }
            });
        });

Это не работает. Кнопка для добавления адреса доставки:

 <button id="addAddress">addAddress</button>

   $('#addAddress').click(function () {
            $.ajax({
                url: 'addAddress',
                method: 'PUT',
                headers: {
                    'Authorization': 'Bearer '
                        + sessionStorage.getItem("accessToken")
                },
                //success: function (data) {
                //    alert(data);
                //},
                error: function (jQXHR) {
                }
            });
        });

Это дает мне эту ошибку:

jquery-3.3.1.min.js: 2 PUT http://localhost:64687/addAddress 500 (внутренняя ошибка сервера)

Это контроллеры:

using EmployeeService.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace EmployeeService.Controllers
{
    public class EmployeesController : ApiController
    {
        ApplicationDbContext db = new ApplicationDbContext();


        [Route("GetUserName")]
        public string GetName()
        {
            string x = User.Identity.Name;
            return x;
        }

        [Route("addAddress")]
       [HttpPut]
        public void addAddress()
        {
            string x = User.Identity.Name;
            var myUser =  db.Users.Find(x);
            myUser.ShippingAdress = "asdasd";
            db.SaveChanges();
        }
    }
}

Я не знаю, связана ли моя проблема с запросом ajax, контроллером или обоими. Может кто-нибудь, пожалуйста, помогите.

1 Ответ

0 голосов
/ 23 сентября 2018

Проблема здесь была в контроллере addAddress ();

string x = User.Identity.Name;   // here is the problem
var myUser =  db.Users.Find(x); // here is the problem
myUser.ShippingAdress = "asdasd";

Метод .Find () работает только с первичными ключами. В моей ситуации я не использовал первичный ключ. Я не знаю, почему это не дало мне никаких ошибок в визуальной студии, но ошибка произошла в консоли браузера. Во всяком случае ... если я изменяю это так, все работает нормально.

using Microsoft.AspNet.Identity;
...

string x = User.Identity.GetUserId(); // we changed this
var myUser =  db.Users.Find(x); 
myUser.ShippingAdress = "asdasd";

Нам нужно добавить «используя Microsoft.AspNet.Identity»; для метода .GetUserId () для работы.

...