我想讓用戶使用他們的Facebook,Twitter,Google或Microsoft帳戶登錄到我的MVC4網站。頁面加載正常,但是當點擊其中一個按鈕以使用其中一個服務進行身份驗證時,我收到錯誤消息。MVC4 oAuth導致空值異常
System.ArgumentNullException:值不能爲空。
錯誤是指在賬戶控制器此行的代碼,因爲Provider
爲空
OAuthWebSecurity.RequestAuthentication(Provider, ReturnUrl);
這行代碼就屬於這種控制器動作
internal class ExternalLoginResult : ActionResult
{
public ExternalLoginResult(string provider, string returnUrl)
{
Provider = provider;
ReturnUrl = returnUrl;
}
public string Provider { get; private set; }
public string ReturnUrl { get; private set; }
public override void ExecuteResult(ControllerContext context)
{
OAuthWebSecurity.RequestAuthentication(Provider, ReturnUrl);
}
}
頁面加載時,按預期設置每個按鈕的值。編譯頁面的頁面源顯示名稱和值集。在這個例子中,對於在AuthConfig嘰嘰喳喳
<div class="authprovider">
<input type="image" name="Provider" value="twitter" alt="Sign in using Twitter" src="/Images/twitter.png" title="Twitter" />
</div>
在RegisterAuth()
文件twitter的部分看起來像這樣
OAuthWebSecurity.RegisterTwitterClient(
consumerKey: "*Hidden*",
consumerSecret: "*Hidden*",
displayName:"Twitter",
extraData:new Dictionary<string, object>{{"Icon","/Images/twitter.png"}});
在局部視圖稱爲_ExternalLoginsListPartial的代碼,用於輸出該按鈕看起來像這樣
@foreach (AuthenticationClientData p in Model)
{
<div class="authprovider">
<input type="image" name="Provider" value="@p.AuthenticationClient.ProviderName" alt="Sign in using @p.DisplayName" src="@p.ExtraData["Icon"].ToString()" title="@p.DisplayName" />
</div>
}
我已經改變了輸入類型image
以允許圖像按鈕。默認情況下,它的類型爲submit
。所有4個外部登錄選項都會發生此錯誤。希望別人碰到它,它讓我抓到了我的頭。
[編輯15:41]
更改按鈕返回到提交似乎獲得通過,但我真的不希望一個可怕的按鈕,而不是圖像。
我已經擁有它的按鈕,但仍然得到提供商空! – Santosh 2013-09-16 12:23:27