API REST Azure Data Lake Storage 2-го поколения с C#

Я пытаюсь установить разрешения ACL для пользователя с помощью API REST Azure Data Lake Storage Gen2. Но я не могу найти к нему пути. Для этого я использовал следующую ссылку Microsoft: microsoft-link-path-update

Вот код, который я придумал, используя C#:

static async Task SetUpPermissions(string accessToken)
    {
        // Replace with your values
        string accountName = "<account-name>";
        string filesystem = "<container-name>";
        string directoryOrFile = "<file-name-with-path>";
        string userObjectId = "<user-object-id>";

        // URL for setting ACL
        string url = $"https://{accountName}.dfs.core.windows.net/{filesystem}/{directoryOrFile}?action= setAccessControl";

        // Headers
        using (HttpClient client = new HttpClient())
        {
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
            client.DefaultRequestHeaders.Add("x-ms-version", "2023-08-03");
            client.DefaultRequestHeaders.Add("x-ms-lease-action", "acquire-release");
            client.DefaultRequestHeaders.Add("x-ms-date", DateTime.UtcNow.ToString("R"));
            client.DefaultRequestHeaders.Add("x-ms-client-request-id", Guid.NewGuid().ToString());

            // Body with ACL settings
            string aclString = $"user:{userObjectId}:rwx,group::r-x,other::r--,mask::rwx,default:user:{userObjectId}:rwx,default:group::r-x,default:other::r--";
            string body = $"[{{\"acl\": \"{aclString}\"}}]";

            // Make the request
            HttpContent content = new StringContent(body, Encoding.UTF8, "application/json");
            HttpResponseMessage response = await client.PatchAsync(url, content);

            // Check the response
            if (response.IsSuccessStatusCode)
            {
                Console.WriteLine("ACL set successfully");
            }
            else
            {
                string responseBody = await response.Content.ReadAsStringAsync();
                Console.WriteLine($"Failed to set ACL: {response.StatusCode} {responseBody}");
            }
        }
    }

Я получаю следующую ошибку:

«Не указан HTTP-заголовок, обязательный для этого запроса»,

однако следует требовать только «x-ms-lease-action».

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Установите разрешения ACL для пользователя с помощью API REST Azure Data Lake Storage Gen2.

Вы можете использовать приведенный ниже код, чтобы установить разрешения ACL для пользователя, использующего Azure Data Lake Storage Gen2 REST APIs.

Код:

using System;
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static async Task Main(string[] args)
        {
            string accessToken = "<access token>";
            await SetUpPermissions(accessToken);
        }

        static async Task SetUpPermissions(string accessToken)
        {
            // Replace with your values
            string accountName = "Storage account name";
            string filesystem = "filesystem name";
            string directoryOrFile = "path to file";
            string userObjectId = "user object id";

            
            string url = $"https://{accountName}.dfs.core.windows.net/{filesystem}/{directoryOrFile}?action=setAccessControl";

            using (HttpClient client = new HttpClient())
            {
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
                client.DefaultRequestHeaders.Add("x-ms-version", "2023-08-03");
                client.DefaultRequestHeaders.Add("x-ms-date", DateTime.UtcNow.ToString("R"));
                client.DefaultRequestHeaders.Add("x-ms-acl", $"user:{userObjectId}:rwx,group::r-x,other::r--,mask::rwx");

                HttpContent content = new StringContent(string.Empty);
                HttpResponseMessage response = await client.PatchAsync(url, content);
                if (response.IsSuccessStatusCode)
                {
                    Console.WriteLine("ACL set successfully");
                }
                else
                {
                    string responseBody = await response.Content.ReadAsStringAsync();
                    Console.WriteLine($"Failed to set ACL: {response.StatusCode} {responseBody}");
                }
            }
        }
    }
}

Выход:

ACL set successfully

Портал:

Ссылка:

Выполнение простых операций REST API ADLS Gen2 Storage с помощью CURL - Центр сообщества Microsoft

Я не мог заставить ваш фрагмент кода работать, пока не предоставил правильные разрешения ACL на уровне контейнера субъекту-службе, устанавливающему разрешение. Все хорошо, и я подтверждаю, что этот код работает. Большое спасибо

suisgrand 26.06.2024 12:00

Другие вопросы по теме