C# 在我的ASP.net网站的身份验证中从Google帐户获取用户信息
这个问题是关于谷歌认证的,当我试着运行下面的代码页面时成功加载的,但当我用谷歌点击登录按钮时,在调试时显示错误在这一行 错误于C# 在我的ASP.net网站的身份验证中从Google帐户获取用户信息,c#,asp.net,C#,Asp.net,这个问题是关于谷歌认证的,当我试着运行下面的代码页面时成功加载的,但当我用谷歌点击登录按钮时,在调试时显示错误在这一行 错误于 GetExtension<FetchResponse>() GetExtension() 在线 Var fetchResponse = Response.GetExtension<FetchResponse>() Var fetchResponse=Response.GetExtension() 那么这一行的问题是什么呢?我试着搜索这个
GetExtension<FetchResponse>()
GetExtension()
在线
Var fetchResponse = Response.GetExtension<FetchResponse>()
Var fetchResponse=Response.GetExtension()
那么这一行的问题是什么呢?我试着搜索这个问题,但我没有找到那个解决方案
protected void Page_Load(object sender, EventArgs e)
{
OpenIdRelyingParty rp = new OpenIdRelyingParty();
var r = rp.GetResponse();
if (r != null)
{
switch (r.Status)
{
case AuthenticationStatus.Authenticated:
NotLoggedIn.Visible = false;
Session["GoogleIdentifier"] = r.ClaimedIdentifier.ToString();
Response.Redirect("Default4.aspx"); //redirect to main page of your website
var fetchResponse = Response.GetExtension<FetchResponse>();
Session["FetchResponse"] = fetchResponse;
var response2 = Session["FetchResponse"] as FetchResponse;
// Use FormsAuthentication to tell ASP.NET that the user is now logged in,
// with the OpenID Claimed Identifier as their username.
string uname = response2.GetAttributeValue(WellKnownAttributes.Name.First) ?? "Guest";
FormsAuthentication.RedirectFromLoginPage(uname, false); //(response.ClaimedIdentifier, false);
break;
case AuthenticationStatus.Canceled:
lblAlertMsg.Text = "Cancelled.";
break;
case AuthenticationStatus.Failed:
lblAlertMsg.Text = "Login Failed.";
break;
}
}
}
protected void OpenLogin_Click(object src, CommandEventArgs e)
{
string discoveryUri = e.CommandArgument.ToString();
OpenIdRelyingParty openid = new OpenIdRelyingParty();
var b = new UriBuilder(Request.Url) { Query = "" };
//var req = openid.CreateRequest(discoveryUri, b.Uri, b.Uri);
//var req = openid.CreateRequest(discoveryUri, b.Uri, b.Uri);
var req = openid.CreateRequest(discoveryUri);
// This is where you would add any OpenID extensions you wanted
// to include in the authentication request. In this case, we are making use of OpenID Attribute Exchange 1.0
// to fetch additional data fields from the OpenID Provider
var fetchRequest = new FetchRequest();
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Name.First);
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Name.Last);
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Contact.HomeAddress.Country);
req.AddExtension(fetchRequest);
req.RedirectToProvider();
}
受保护的无效页面加载(对象发送方,事件参数e)
{
OpenIdRelyingParty rp=新的OpenIdRelyingParty();
var r=rp.GetResponse();
如果(r!=null)
{
开关(右状态)
{
案例验证状态。已验证:
NotLoggedIn.Visible=false;
会话[“GoogleIdentifier”]=r.ClaimedIdentifier.ToString();
Response.Redirect(“Default4.aspx”);//重定向到网站主页
var fetchResponse=Response.GetExtension();
会话[“FetchResponse”]=FetchResponse;
var response2=会话[“FetchResponse”]作为FetchResponse;
//使用FormsAuthentication告诉ASP.NET用户现在已登录,
//使用OpenID声明的标识符作为其用户名。
字符串uname=response2.GetAttributeValue(WellKnownAttributes.Name.First)??“Guest”;
FormsAuthentication.RedirectFromLoginPage(uname,false);/(response.ClaimedIdentifier,false);
打破
案例身份验证状态。已取消:
lblAlertMsg.Text=“已取消。”;
打破
案例身份验证状态。失败:
lblAlertMsg.Text=“登录失败。”;
打破
}
}
}
受保护的void OpenLogin_Click(对象src、CommandEventArgs e)
{
string discoveryUri=e.CommandArgument.ToString();
OpenIdRelyingParty openid=新OpenIdRelyingParty();
var b=新的UriBuilder(Request.Url){Query=”“};
//var req=openid.CreateRequest(discoveryUri,b.Uri,b.Uri);
//var req=openid.CreateRequest(discoveryUri,b.Uri,b.Uri);
var req=openid.CreateRequest(discoveryUri);
//您可以在这里添加所需的任何OpenID扩展
//在本例中,我们使用OpenID属性Exchange 1.0
//从OpenID提供程序获取其他数据字段
var fetchRequest=new fetchRequest();
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Name.First);
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Name.Last);
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Contact.HomeAddress.Country);
请求追加扩展(获取请求);
req.redirectTopProvider();
}
应该是
var fetchResponse = r.GetExtension<FetchResponse>();
var fetchResponse=r.GetExtension();
而不是
var fetchResponse = Response.GetExtension<FetchResponse>();
var fetchResponse=Response.GetExtension();