我在用DotNetOpenAuth获取得GoogleAccessToken之后,在向google Buzz post数据时,总得到500错误或401错误,WebRequest request = consumer.PrepareAuthorizedRequest(new MessageReceivingEndpoint(PostUrl, HttpDeliveryMethods.AuthorizationHeaderRequest | HttpDeliveryMethods.PostRequest), State2.GoogleAccessToken);
        request.ContentType = "application/atom+xml";
        request.Method = "post";
        request.ContentLength = ms.Length;        
        ms.Seek(0, SeekOrigin.Begin);        using (Stream requestStream = request.GetRequestStream())
        {
            ms.CopyTo(requestStream);
        }
        request.GetResponse();//这里500错误
究竟要怎么写才对?这个问题搞了快一周了,都没解决。去DotNetOpenAuth论坛问也是没有任何回音,急死了。谁能指点方向?

解决方案 »

  1.   

    还是贴出全部代码吧:
    通过DotNetOpenAuth获取得google buzzGoogleAccessTokenif (authResponse != null)
            {            
                switch (authResponse.Status)
                {
                    case AuthenticationStatus.Authenticated:
                        FetchResponse fetch = authResponse.GetExtension<FetchResponse>();
                        AuthorizedTokenResponse accessToken = GoogleLogin.GoogleWebConsumer.ProcessUserAuthorization(authResponse);
                        if (accessToken != null)
                        {
                            State2.GoogleAccessToken = accessToken.AccessToken;
                            string userEmail = null;
                            if (fetch != null)
                            {
                                userEmail = fetch.GetAttributeValue(WellKnownAttributes.Contact.Email);
                            }
                            PostBuzzEntry(GoogleLogin.GoogleWebConsumer, State2.GoogleAccessToken, "https://www.googleapis.com/buzz/v1/activities/@me/@self?key=AIzaSyBsVVpEHL7ov6gBB7WfnRASlfzPSKQUIU0", "testtesttest");
                            Response.Write(State2.GoogleAccessToken);
                        }                    
                        break;
    //向google post 数据,总得到500错误private void PostBuzzEntry(ConsumerBase consumer, string accessToken, string PostUrl, string body)
        {        const string Atom = "http://www.w3.org/2005/Atom";
            XNamespace aw = "http://www.w3.org/2005/Atom";
            XNamespace activity = "http://activitystrea.ms/spec/1.0";
            XElement entry = new XElement(aw + "entry",
            new XAttribute("xmlns", "http://www.w3.org/2005/Atom"),
            new XAttribute(XNamespace.Xmlns + "activity", "http://activitystrea.ms/spec/1.0"),
            new XElement(activity + "object",
            new XElement(activity + "object-type", "http://activitystrea.ms/schema/1.0/note"),
            new XElement(XName.Get("content", Atom), new XAttribute("type", "html"), Server.UrlEncode("dfsfds"))));        MemoryStream ms = new MemoryStream();
            XmlWriterSettings xws = new XmlWriterSettings()
            {
                Encoding = Encoding.UTF8,
            };
            XmlWriter xw = XmlWriter.Create(ms, xws);
            entry.WriteTo(xw);
            //File.WriteAllText(Server.MapPath("post.xml"), entry.ToString());//这里已能按google要求构造出
    <entry xmlns="http://www.w3.org/2005/Atom" xmlns:activity="http://activitystrea.ms/spec/1.0">
      <activity:object>
        <activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
        <content type="html">Hey, this is my first Buzz Post!</content>
      </activity:object>
    </entry>这样的xml文件。http://code.google.com/intl/en/apis/buzz/v1/using_rest.html#create-activity
            xw.Flush();        
                    WebRequest request = consumer.PrepareAuthorizedRequest(new MessageReceivingEndpoint(PostUrl, HttpDeliveryMethods.AuthorizationHeaderRequest | HttpDeliveryMethods.PostRequest), State2.GoogleAccessToken);
            request.ContentType = "application/atom+xml";
            request.Method = "post";
            request.ContentLength = ms.Length;        
            ms.Seek(0, SeekOrigin.Begin);        using (Stream requestStream = request.GetRequestStream())
            {
                ms.CopyTo(requestStream);
            }
            request.GetResponse();
        }
      

  2.   

    还真看不出什么问题。估计是XML的问题