Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 发送HTTP标头后,DotNetOpenAuth授权无法设置状态?_C#_Asp.net Mvc_Facebook_Dotnetopenauth - Fatal编程技术网

C# 发送HTTP标头后,DotNetOpenAuth授权无法设置状态?

C# 发送HTTP标头后,DotNetOpenAuth授权无法设置状态?,c#,asp.net-mvc,facebook,dotnetopenauth,C#,Asp.net Mvc,Facebook,Dotnetopenauth,我正在用异常填充elmah错误日志: 发送HTTP头后,服务器无法设置状态。 70%的请求是由爬虫程序(alexa、googlebot)引起的,我不能保证其余的请求不是带有假cookie、代理字符串等的机器人。但有些请求看起来确实合法 以下是发生错误的Facebook授权方法: public class FacebookClient : WebServerClient { private static readonly AuthorizationServerDesc

我正在用异常填充elmah错误日志:

发送HTTP头后,服务器无法设置状态。

70%的请求是由爬虫程序(alexa、googlebot)引起的,我不能保证其余的请求不是带有假cookie、代理字符串等的机器人。但有些请求看起来确实合法

以下是发生错误的Facebook授权方法:

  public class FacebookClient : WebServerClient 
    {
        private static readonly AuthorizationServerDescription FacebookDescription = new AuthorizationServerDescription 
        {
            TokenEndpoint = new Uri("https://graph.facebook.com/oauth/access_token"),
            AuthorizationEndpoint = new Uri("https://graph.facebook.com/oauth/authorize"),
        };

        /// <summary>
        /// Initializes a new instance of the <see cref="FacebookClient"/> class.
        /// </summary>
        public FacebookClient() : base(FacebookDescription) 
        {
        }
    }

[AllowAnonymous]
公共操作结果Facebook(字符串返回URL)
{
IAAuthorizationState authorization=client.ProcessUserAuthorization();
if(授权==null)
{
var scope=新列表();
范围。添加(“电子邮件”);
client.RequestUserAuthorization(范围);
}
其他的
{
尝试
{
var request=WebRequest.Create(“https://graph.facebook.com/me?&access_token=“+Uri.EscapeDataString(authorization.AccessToken));
使用(var response=request.GetResponse())
使用(var responseStream=response.GetResponseStream())
{
var-graph=FacebookGraph.Deserialize(responseStream);
if(Membership.GetUser(graph.Id.ToString())==null)
{
MembershipCreateStatus MembershipCreateStatus=MembershipCreateStatus.Success;
var user=Common.CreateUser(membershipCreateStatus,graph.Id.ToString(),HttpUtility.HtmlEncode(graph.Email));
if(membershipCreateStatus!=membershipCreateStatus.Success)
{
TempData[“message”]=“创建帐户失败。”+membershipCreateStatus.ToString();
返回重定向操作(“登录”、“帐户”);
}
if(membershipCreateStatus==membershipCreateStatus.Success)
{
AddUserShortID((Guid)user.ProviderUserKey,HttpUtility.HtmlEncode(graph.Name));
Common.Authorize(graph.Id.ToString());
}
}
其他的
{
Common.Authorize(graph.Id.ToString());
}
}
}
抓住
{
TempData[“message”]=“创建帐户失败。”;
返回重定向操作(“登录”、“帐户”);
}
}
if(!string.IsNullOrWhiteSpace(returnUrl)和&Url.islocalur(returnUrl))
{
返回重定向(returnUrl);
}
返回重定向到操作(“索引”、“主页”);
}
代码中最可疑的部分是什么,可能导致这种行为?为什么这种情况大部分时间都发生在机器人身上?有没有办法复制这样的东西


更新:这不仅仅是机器人造成的,我昨天也遇到了这个异常,只是在日志中,在浏览器中我找不到graph.facebook.com/…

我发现了这个异常发生的时间,当我被重定向到facebook登录页面时,如果你刷新页面或输入登录信息错误,或者,如果由于任何原因该页面当前不可用,则会记录此异常,但最重要的是,用户不会看到任何异常情况发生,也不会在登录时遇到任何问题。

 private static readonly FacebookClient client = new FacebookClient
    {
        ClientIdentifier = ConfigurationManager.AppSettings["facebookAppID"],

        ClientCredentialApplicator = ClientCredentialApplicator.PostParameter(ConfigurationManager.AppSettings["facebookAppSecret"]),
    };
    [AllowAnonymous]
    public ActionResult Facebook(string returnUrl)
    {
        IAuthorizationState authorization = client.ProcessUserAuthorization();

        if (authorization == null)
        {
            var scope = new List<string>();

            scope.Add("email");

            client.RequestUserAuthorization(scope);
        }
        else
        {
            try
            {
                var request = WebRequest.Create("https://graph.facebook.com/me?&access_token=" + Uri.EscapeDataString(authorization.AccessToken));

                using (var response = request.GetResponse())

                using (var responseStream = response.GetResponseStream())
                {
                    var graph = FacebookGraph.Deserialize(responseStream);

                    if (Membership.GetUser(graph.Id.ToString()) == null)
                    {
                        MembershipCreateStatus membershipCreateStatus = MembershipCreateStatus.Success;

                        var user = Common.CreateUser(membershipCreateStatus, graph.Id.ToString(), HttpUtility.HtmlEncode(graph.Email));

                        if (membershipCreateStatus != MembershipCreateStatus.Success)
                        {
                            TempData["message"] = "Unsuccessful creation of Account. " + membershipCreateStatus.ToString();

                            return RedirectToAction("Login", "Account");
                        }

                        if (membershipCreateStatus == MembershipCreateStatus.Success)
                        {

                            AddUserShortID((Guid)user.ProviderUserKey, HttpUtility.HtmlEncode(graph.Name));

                            Common.Authorize(graph.Id.ToString());
                        }
                    }
                    else
                    {
                        Common.Authorize(graph.Id.ToString());
                    }
                }
            }
            catch
            {
                TempData["message"] = "Unsuccessful creation of Account. ";

                return RedirectToAction("Login", "Account");
            }
        }

        if (!string.IsNullOrWhiteSpace(returnUrl) && Url.IsLocalUrl(returnUrl))
        {
            return Redirect(returnUrl);
        }

        return RedirectToAction("Index", "Home");
    }