Как вернуть переменную в API-функции Azure и прочитать ее через функцию InvokeApiAsync в мобильном приложении - PullRequest
0 голосов
/ 30 декабря 2018

Я хочу вернуть имя для BLOB-объекта, созданного в Azure, при вызове InvokeApiAsync () в моем мобильном приложении

Функция в мобильном приложении:

private const string PhotoResource = "photo";

public async Task UploadPhoto(MediaFile photo)
{
    using (var s = photo.GetStream())
    {
        var bytes = new byte[s.Length];
        await s.ReadAsync(bytes, 0, Convert.ToInt32(s.Length));

        var content = new
        {
                Photo = Convert.ToBase64String(bytes)
        };

        var json = JToken.FromObject(content);

        await Client.InvokeApiAsync(PhotoResource, json);
    }
}

Функция Azure - run.csx:

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, 
ILogger log)
{
    dynamic data = await req.Content.ReadAsAsync<object>();
    string photo = data?.Photo;
    var imageBytes = Convert.FromBase64String(photo);

    var connectionString = 
        ConfigurationManager.AppSettings["BlobStorageConnectionString"];
    CloudStorageAccount storageAccount;
    CloudStorageAccount.TryParse(connectionString, out storageAccount);

    var blobClient = storageAccount.CreateCloudBlobClient();
    var blobContainer = blobClient.GetContainerReference("beerphotos");

    var blobName = Guid.NewGuid().ToString();
    var blob = blobContainer.GetBlockBlobReference(blobName);
    blob.Properties.ContentType = "image/jpg";

    await blob.UploadFromByteArrayAsync(imageBytes, 0, imageBytes.Length);

    log.LogInformation($"Blob {blobName} created");

    //return req.CreateResponse(HttpStatusCode.OK);
    //NEW CODE ADDED AFTER ANSWER FROM JASON
    var response = req.CreateResponse();
    response.StatusCode = HttpStatusCode.OK;
    response.Content = new StringContent(blobName);
    return response;
}

Если я пытаюсь написать, возвращаем req.CreateResponse (HttpStatusCode.OK, blobName);Я получаю эту ошибку: run.csx (35,16): ошибка CS1501: нет перегрузки для метода 'CreateResponse' принимает 2 аргумента

Что мне не хватает в функции Azure?

И какдолжен ли вызов InvokeApiAsync () в моем мобильном приложении выглядеть как чтение имени большого двоичного объекта?

РЕДАКТИРОВАНИЕ:

После добавления нового кода в функцию Azure я получаю следующее необработанное исключение: Newtonsoft.Json.JsonReaderException: входная строка '813255ca-02d0-4feb-8012-2d5a0ad49464' не являетсядействительный номер.Путь '', строка 1, позиция 36.

Исключение выдается, когда Client.InvokeApiAsync (PhotoResource, json) в мобильной функции возвращается с ответом.'813255ca-02d0-4feb-8012-2d5a0ad49464' на самом деле является названием фотографии.

1 Ответ

0 голосов
/ 31 декабря 2018

возвращает данные в теле ответа

return req.CreateResponse(HttpStatusCode.OK) { Content = new StringContent(blobName) };

затем при его вызове

var resp = await Client.InvokeApiAsync(PhotoResource, json);

if (resp.StatusCode == HttpStatusCode.OK) {
  var guid = await resp.Content.ReadAsStringAsync();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...