metadata_storage_path error in .NET with Azure AI Search.

Hassan Kaleem 45 Reputation points
2024-05-14T10:27:27.2266667+00:00

Right now from my post api I am storing the address like UploadEmailAsync() in Azure Queue. I have tried saving it with and without JSON format but path which we use for Filters in Azure AI Search requires the base64 converted link. Right now i have tested the approaches where the link has been uploaded on Azure Queue and then the link has been rederived in the function app but when i convert that into base64 it is not filtering the data because the base64 string of url is missing the 0 at the end.
Here are the examples Link
https://xxxxxxx.blob.core.windows.net/xxxxxxxxx/submission/xxxxx-3504-4ea1-a6d2-b78f963d8d0b/rawemail.eml,
Now if i convert this into base 64 inside function app it is converted into this
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvbi81YTJiOGFmZi0zNTA0LTRlYTEtYTZkMi1iNzhmOTYzZDhkMGIvcmF3ZW1haWwuZW1s
which Azure AI Search is not accepting it is accepting the base64 like this with 0 added
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxvbi81YTJiOGFmZi0zNTA0LTRlYTEtYTZkMi1iNzhmOTYzZDhkMGIvcmF3ZW1haWwuZW1s0
public async Task UploadEmailAsync(string base64Content, string name, string containerName)

{

// Decode the base64 string

byte[] data = Convert.FromBase64String(base64Content);

// Get a reference to a blob

BlobContainerClient containerClient = _blobServiceClient.GetBlobContainerClient(containerName);

BlobClient blobClient = containerClient.GetBlobClient(name);

//await SendMessageAsync(blobClient.Uri.ToString());

await SendMessageAsync(JsonConvert.SerializeObject(blobClient.Uri));

// Upload the blob

using (var stream = new MemoryStream(data, writable: false))

{

    await blobClient.UploadAsync(stream, overwrite: true);

}

}

public async Task SendMessageAsync(string message)

{

await _queueClient.SendMessageAsync(message);

}

Function App Code
public async Task<Uri> ReadMessagesFromQueueAsync()

{

try

{

    var response = await _queueClient.ReceiveMessagesAsync();

    if (response.Value.Any())

    {

        var message = response.Value.FirstOrDefault();

        var jsonUri = message.MessageText;

        // Deserialize the JSON string back into a URI object

        Uri uri = JsonConvert.DeserializeObject<Uri>(jsonUri);

        await _queueClient.DeleteMessageAsync(message.MessageId, message.PopReceipt);

        return uri;

    }

    else

    {

        return null;

    }

}

catch (Exception ex)

{

    Console.WriteLine($"Error receiving messages from the queue: {ex.Message}");

    throw;

}

}

public async Task<IActionResult> Classifier(Uri requestAddress)

{

Console.WriteLine(requestAddress);

try

{

    // Convert URL to base64 using URL-safe encoding

    string base64String = Convert.ToBase64String(Encoding.UTF8.GetBytes(requestAddress.ToString()));

    //base64String += "0";

    Console.WriteLine("Base64 string of blob URL: " + base64String);

    var searchText = "xxxxxxxxxxxxxxxxxxx";

    var head = "xxxxxxxxxxxxxxxxxxxxxx";

    _indexClient = new SearchIndexClient(new Uri(_searchServiceUri), new AzureKeyCredential(_queryApiKey));

    _searchClient = _indexClient.GetSearchClient(_searchServiceIndex);

    var options = new SearchOptions()

    {

        QueryType = Azure.Search.Documents.Models.SearchQueryType.Simple,

        IncludeTotalCount = true,

        Filter = $"metadata_storage_path eq '{base64String}'"

    };

    options.SearchFields.Add("metadata_message_to");

    options.SearchFields.Add("metadata_message_cc");

    var resultList = await _searchClient.SearchAsync<AzureAISearch>(head + " OR " + searchText, options);
Azure AI Search
Azure AI Search
An Azure search service with built-in artificial intelligence capabilities that enrich information to help identify and explore relevant content at scale.
Developer technologies | ASP.NET | ASP.NET Core
Azure Queue Storage
Azure Queue Storage
An Azure service that provides messaging queues in the cloud.
{count} votes

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.