Search code examples
c#postmanmultipartform-data

Postman form-data: How to program it inside a HttpRequestMessage?


I am doing a request through postman to a specific url but I set the form-data type in order to get data to the site like this:

enter image description here

Now I want to program this request inside C# but everything I tried so far is returning a 400 Bad Request response. This is what I tried:

public async Task<CheckAccessTokenModel> CheckAccessTokenAsync(string accessToken)
{

    string uriString = "someurl";
    var uri = new Uri(uriString);

    try
    {
        using(var httpClient = new HttpClient())
        {
            var request = new HttpRequestMessage
            {
                Method = HttpMethod.Post,
                RequestUri = uri
            };

            var ClientId = ConfigurationAccessor.Configuration["WebCredentials:ClientId"];
            var Secret = ConfigurationAccessor.Configuration["WebCredentials:Secret"];
            var authString = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{ClientId}:{Secret}"));

            request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", authString);
            MultipartFormDataContent content = new MultipartFormDataContent();
            content.Add(new StringContent("token"), accessToken);

            request.Content = content;
            var response = await httpClient.SendAsync(request);

            var checkTokenResponseData = await response.Content.ReadAsStringAsync();
            //return new CheckAccessTokenModel { Active = true, Exp = 1647431224233 };
            return JsonConvert.DeserializeObject<CheckAccessTokenModel>(checkTokenResponseData);
        }
    }
    catch
    {
        return null;
    }

}

I am doing it with the MultipartFormDataContent Object as suggested by many others here but it still won't work. What can be the problem here?

EDIT: Wrong picture replaced


Solution

  • You can simply

    request.Content = new StringContent($"token={accessToken}");
    

    With form data I think it's something like this:

    var data = new Dictionary<string, string>
    {
      {"token", acccessToken}
    };
    
    using var content = new FormUrlEncodedContent(data);
    request.Content = content;