2015-05-01 2 views
0

По какой-то причине, когда я отправляю сообщение с моего приложения xamarin, я получаю 500, используя хром Advanced Rest Client. Я могу опубликовать фотографию, чтобы служба работала (проблема в сообщении приложения). ..Xamarin post photo to azure mobile service

Мой контроллер:

public class BlobController : ApiController 
    { 
     public Task<List<FileDetails>> Post() 
     { 
      if (!Request.Content.IsMimeMultipartContent("form-data")) 
      { 
       throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 
      } 

      return FileStorage.StoreFiles(WebConfigurationManager.AppSettings["WebApiContainer"], Request); 
     } 

public class FileDetails 
{ 
    public string Name { get; set; } 
    public long Size { get; set; } 
    public string ContentType { get; set; } 
    public string Location { get; set; } 
} 

Мой пост:

public async Task<FileDetails> PostPhotoRequest(string fileName, MemoryStream file) 
{ 
    byte[] response = await _service.PostFileRequest("Blob", fileName, file); 
    string json = System.Text.Encoding.UTF8.GetString(response, 0, response.Length); 
    if (string.IsNullOrEmpty(json)) { return new FileDetails(); } 
    return JsonConvert.DeserializeObject<FileDetails>(json); 
} 


    public async Task<byte[]> PostFileRequest(string url, string filename, MemoryStream file) 
    { 
     var client = new HttpClient(); 
     var content = new MultipartFormDataContent("boundary=----WebKitFormBoundaryGQ9UK82gG8XpzEBT"); 
     content.Add(new StreamContent(file)); 
     content.Add(new FormUrlEncodedContent(new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("filename", filename) })); 
     content.Headers.Add("X-ZUMO-APPLICATION", Constants.MobileServiceApplicationKey); 
     var response = await client.PostAsync(Constants.MobileServiceUrl + "api/" + url, content); 
     if (response.StatusCode == HttpStatusCode.OK) 
     { 
      byte[] responseContent = await response.Content.ReadAsByteArrayAsync(); 
      return responseContent; 
     } 

     return null; 
    } 

ответ StatusCode: Внутренняя ошибка сервера

ответ

0

Стараясь как решение .... добавлено Content-Type и Content-Disposition

public async Task<byte[]> PostFileRequest(string url, string filename, MemoryStream file) 
{ 
    var client = new HttpClient(); 
    var content = new MultipartFormDataContent(); 
    var streamContent = new StreamContent(file); 
    streamContent.Headers.Add("Content-Type", "application/octet-stream"); 
    streamContent.Headers.Add("Content-Disposition", "form-data; name=\"file\"; filename=\"" + filename + "\""); 
    content.Add(streamContent, "file", filename); 
    content.Headers.Add("X-ZUMO-APPLICATION", Constants.MobileServiceApplicationKey); 
    var response = await client.PostAsync(Constants.MobileServiceUrl + "api/" + url, content); 
    if (response.StatusCode == HttpStatusCode.OK) 
    { 
     byte[] responseContent = await response.Content.ReadAsByteArrayAsync(); 
     return responseContent; 
    } 

    return null; 
} 
0

, так как вы получаете сообщение 500 об ошибке, мое предложение сначала посмотреть на журнал с панели управления Azure Portal , Это может точно определить ошибку, возможно, несоответствие атрибута.

Смежные вопросы