我正在尝试使用个人帐户的 MVC 5.2 模板。一切正常,除了当我尝试删除用户登录时收到以下错误消息:
The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.
在 ManagerController 的下面一行:
var result = await this.UserManager.RemoveLoginAsync(this.User.Identity.GetUserId(), new UserLoginInfo(loginProvider, providerKey));
这是完整的 RemoveLogin 操作:
[HttpPost]
[Route("RemoveLogin")]
[ValidateAntiForgeryToken]
public async Task<ActionResult> RemoveLogin(string loginProvider, string providerKey)
{
ManageMessageId? message;
var result = await this.UserManager.RemoveLoginAsync(this.User.Identity.GetUserId(), new UserLoginInfo(loginProvider, providerKey));
if( result.Succeeded )
{
var user = await this.UserManager.FindByIdAsync(this.User.Identity.GetUserId());
if( user != null )
await this.SignInAsync(user, isPersistent: false);
message = ManageMessageId.RemoveLoginSuccess;
}
else
message = ManageMessageId.Error;
return this.RedirectToAction("ManageLogins", new { Message = message });
}
最佳答案
我能够通过更改行来让它工作:
public async Task<IActionResult> RemoveLogin(
string loginProvider,
string providerKey)
到
public async Task<IActionResult> RemoveLogin(
[Bind(Prefix = "Account.LoginProvider")]string loginProvider,
[Bind(Prefix = "Account.ProviderKey")]string providerKey)
原因:
无论出于何种原因,MVC 绑定(bind)都没有正确解析参数绑定(bind):
<input asp-for="@account.LoginProvider" type="hidden" />
<input asp-for="@account.ProviderKey" type="hidden" />
正在创建以下表单:
<input type="hidden" id="account_LoginProvider" name="account.LoginProvider" value="Facebook">
<input type="hidden" id="account_ProviderKey" name="account.ProviderKey" value="...">
这些名称未绑定(bind)到参数名称 loginProvider 和 providerKey。
这是提供解决方法的答案:
关于c# - 无法删除用户外部登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26158289/