将身份与WEB API一起使用,我创建了一些保存在 SQL 数据库。我已将自定义属性(发货地址(添加到使用标识创建的 User 表附带的已默认属性中。
当我创建用户时,我输入:用户名,电子邮件和密码来创建用户。我希望稍后添加送货地址。
我需要将送货地址添加到当前登录的用户。(我登录或退出没有问题(。
这是我尝试过的:
当我单击此按钮时,我在警报框中获得当前登录的用户名。 这行得通。
<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 请求、控制器或两者兼而有之。有人可以帮忙吗?
这里的问题出在 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";
我们需要为方法添加"using Microsoft.AspNet.Identity;"。GetUserId(( 工作。