2014-10-02 122 views
4

我試圖用個人帳戶的MVC 5.2模板。除了當我試圖刪除用戶的登錄,我得到以下錯誤信息時,一切正常:無法刪除用戶外部登錄

操作失敗:關係無法更改,因爲一個或多個外鍵屬性是不可空。當對關係進行更改時,相關的外鍵屬性將設置爲空值。如果外鍵不支持空值,則必須定義新的關係,必須爲外鍵屬性指定另一個非空值,或者必須刪除不相關的對象。

以下行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 }); 
    } 
+0

:本loginProvider和providerKey均爲空。 – 2015-07-09 17:52:32

回答

0

我能夠得到它通過改變線路工作:

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結合並沒有解決參數正確綁定:

<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="..."> 

這些名稱沒有綁定到參數名稱loginProvider和providerKey。

下面是提供的解決方法了答案:我有同樣的問題

https://stackoverflow.com/a/3869512/567524