通过Youtube api将视频上传到Youtube导致WebException - (500)内部服务器错误

时间:2013-04-11 06:53:16

标签: c# asp.net-mvc youtube-api youtube.net-api

我正在制作一个POC ASP.NET MVC应用程序,用于将视频上传到Youtube。 当我尝试上传视频时,我得到一个GDataRequestException,其中WebException为内部异常。这是我得到的信息:

(500) Internal Server Error.
The stacktrace of the WebException is:

   at System.Net.HttpWebRequest.GetResponse()
   at Google.GData.Client.GDataRequest.Execute()

这是我的代码:

public ActionResult oauth2callback(string code)
{
    if (!string.IsNullOrWhiteSpace(code))
    {
         JObject json;

         NameValueCollection postData = new NameValueCollection();
         postData.Add("code", code);
         postData.Add("client_id", "The client ID");
         postData.Add("client_secret", "The secret code");
         postData.Add("redirect_uri", "http://localhost:64896/home/oauth2callback");
         postData.Add("grant_type", "authorization_code");

         json = JObject.Parse(
           HttpClient.PostUrl(
             new Uri("https://accounts.google.com/o/oauth2/token"), postData));
         string accessToken = json["access_token"].ToString();
         string refreshToken = json["refresh_token"].ToString();
         bool isBearer =
           string.Compare(json["token_type"].ToString(),
                          "Bearer",
                          true,
                          CultureInfo.CurrentCulture) == 0;

         var settings = new YouTubeRequestSettings("App name",
            "API key from simple API access", accessToken);
         var request = new YouTubeRequest(settings);

         Video newVideo = new Video();
         newVideo.Title = "Test Video";
         newVideo.Keywords = "key 1 , key 2";

         newVideo.Tags.Add(new MediaCategory("Games", YouTubeNameTable.CategorySchema));

         newVideo.Description = "Upload testing";
         newVideo.YouTubeEntry.Private = false;

         newVideo.Private = true; 

         newVideo.YouTubeEntry.MediaSource = new 
            MediaFileSource(@"C:\Users\Kaare\Videos\TestVideo1.avi", "video/x-msvideo");

         try
            {
                Video createdVideo = request.Upload(newVideo); 
                return View();
            }                
            catch (GDataRequestException exp)
            {
               //Do something mening full

            }                 
    }
    else
    {
        return RedirectToAction("LoginFail");
    }
}  

你们有没有人知道什么是错的?

1 个答案:

答案 0 :(得分:0)

错误500很难。

是否可以获得可能包含更多详细信息的XML响应? https://developers.google.com/youtube/2.0/developers_guide_protocol_error_responses

  

500响应代码表示YouTube在处理请求时遇到错误。您可以稍后重试该请求。

https://developers.google.com/youtube/2.0/reference#Response_Codes

您对oauth2参数使用的范围是什么?您是否尝试过其他YouTube帐户?你能尝试使用可恢复的上传吗?

我唯一看到的可能是问题的是YouTubeRequestSettings(),它是使用authsub的构造函数,而您使用的是oauth2。您可以修改youtube sdk的源代码并添加一个新的YouTubeRequestSettings()构造函数,该构造函数使用oauth2参数对象而不仅仅是访问密钥。例如,您可以查看gdata sdk中的RequestSettings()oauth2构造函数。

这可能不是问题,因为你可以做其他请求,只是不上传。

最后一个想法: request.Service.InsertAsync(new Uri(“http://uploads.gdata.youtube.com/feeds/api/users/default/uploads”),newVideo.AtomEntry,newVideo);