2015-06-15 1 views
0

Используя следующий код:Получение 400 Bad Request при попытке загрузить видео с YouTube API v3 для C#

public async Task<YouTubeService> GetYouTubeService(string userEmail) 
    { 
     UserCredential credential; 
     using (var stream = new FileStream("client_secret.json", FileMode.Open, FileAccess.Read)) 
     { 
      GoogleWebAuthorizationBroker.Folder = "Tasks.Auth.Store"; 
      credential = GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets, 
       new[] 
       { 
        YouTubeService.Scope.Youtube, 
        YouTubeService.Scope.Youtubepartner, 
        YouTubeService.Scope.YoutubeUpload, 
        YouTubeService.Scope.YoutubepartnerChannelAudit, 
        YouTubeService.Scope.YoutubeReadonly 
       }, 
       userEmail, 
       CancellationToken.None, 
       new FileDataStore("YouTube.Auth.Store")).Result; 
     } 

     var youtubeService = new YouTubeService(new BaseClientService.Initializer() 
     { 
      HttpClientInitializer = credential, 
      ApplicationName = this.GetType().ToString() 
     }); 

     return youtubeService; 
    } 

      var video = new Video(); 
      video.Snippet = new VideoSnippet(); 
      video.Snippet.Title = "Default Video Title"; 
      video.Snippet.Description = "Default Video Description"; 
      video.Snippet.Tags = new string[] { "tag1", "tag2" }; 

      video.Snippet.CategoryId = "22"; 
      video.Status = new VideoStatus(); 
      video.Status.PrivacyStatus = "public"; 
      var filePath = @"c:\temp\nouvelair.mp4"; 

      using (var fileStream = new FileStream(filePath, FileMode.Open)) 
      { 
       var videosInsertRequest = youtubeService.Videos.Insert(video, "snippet.status", fileStream, "video/*"); 
       videosInsertRequest.ProgressChanged += videosInsertRequest_ProgressChanged; 
       videosInsertRequest.ResponseReceived += videosInsertRequest_ResponseReceived; 
       await videosInsertRequest.UploadAsync(); 
      } 


    public void videosInsertRequest_ProgressChanged(Google.Apis.Upload.IUploadProgress progress) 
    { 
     switch (progress.Status) 
     { 
      case UploadStatus.Uploading: 
       Console.WriteLine("{0} bytes sent.", progress.BytesSent); 
       break; 
      case UploadStatus.Failed: 
       Console.WriteLine("An error prevented the upload from completing.\n{0}", progress.Exception); 
       break; 
      case UploadStatus.Completed: 
       Console.WriteLine("An error prevented the upload from completing.\n{0}", progress.Exception); 
       break; 
     } 
    } 

В функции videosInsertRequest_ProgressChanged, я сначала получить статус видео, начиная затем вправо после того, как я получу статус сбоя со следующим исключением:

Код состояния ответа не указывает на успех: 400 (неверный запрос).

+0

Можете ли вы захватить запрос HTTP либо с Wireshark или стельку и отправить его слишком ? – matcheek

+0

Я установил fiddler, но не вижу в нем никакого запроса при выполнении моего кода C# в отладке. –

+0

Это https? Если это так, fiddler требует дополнительной конфигурации, чтобы показать запрос – matcheek

ответ

1

Вы пытаетесь установить значения в части, которая не существует; у вас есть, в качестве части аргумента:

snippet.status 

Но вам нужно разграничивать части с запятой, а не точка:

var videosInsertRequest = youtubeService.Videos.Insert(video, "snippet,status", fileStream, "video/*"); 
+0

Спасибо, сейчас работает. –