import { Builder } from '../utils/builder' import { Config, Http } from '../utils/generate' import { Client } from '../utils/registry' import { GetContentType, ContentTypeIncludes } from '../utils/utils' export default { default: true, language: 'csharp', client: 'http', generate(config: Config, http: Http): string { const builder = new Builder({ indent: config.indent || ' ', join: config.join || '\n' }) builder.line('using System;') builder.line('using System.Net.Http;') builder.line('using System.Threading.Tasks;') builder.line('using System.Web;') builder.line() builder.line('namespace HttpClientExample') builder.line('{') builder.indent() builder.line('class Program') builder.line('{') builder.indent() builder.line('static async Task Main(string[] args)') builder.line('{') builder.indent() builder.line('using (HttpClient client = new HttpClient())') builder.line('{') builder.indent() // Build URL with parameters if (http.params && Object.keys(http.params).length > 0) { builder.line('var uriBuilder = new UriBuilder("' + http.url + '");') builder.line('var query = HttpUtility.ParseQueryString(uriBuilder.Query);') for (const [key, value] of Object.entries(http.params)) { if (Array.isArray(value)) { for (const val of value) { builder.line(`query.Add("${key}", "${val}");`) } } else { builder.line(`query.Add("${key}", "${value}");`) } } builder.line('uriBuilder.Query = query.ToString();') builder.line( `HttpRequestMessage request = new HttpRequestMessage(HttpMethod.${http.method.toUpperCase()}, uriBuilder.ToString());` ) } else { builder.line( `HttpRequestMessage request = new HttpRequestMessage(HttpMethod.${http.method.toUpperCase()}, "${http.url}");` ) } if (http.headers && Object.keys(http.headers).length > 0) { builder.line() for (const [key, value] of Object.entries(http.headers)) { if (Array.isArray(value)) { value.forEach((val) => builder.line(`request.Headers.Add("${key}", "${val}");`)) } else { builder.line(`request.Headers.Add("${key}", "${value}");`) } } } if (http.cookies && Object.keys(http.cookies).length > 0) { builder.line() const cookies = Object.entries(http.cookies) .map(([key, value]) => `${key}=${value}`) .join('; ') builder.line(`request.Headers.Add("Cookie", "${cookies}");`) } if (http.body) { builder.line() const contentType = GetContentType(http.headers) if (ContentTypeIncludes(contentType, 'form')) { builder.line('var formContent = new FormUrlEncodedContent(new Dictionary') builder.line('{') builder.indent() for (const [key, value] of Object.entries(http.body)) { builder.line(`{ "${key}", "${value}" },`) } builder.outdent() builder.line('});') builder.line('request.Content = formContent;') } else { // Default to JSON (if content-type is json or not specified) builder.line('request.Content = new StringContent(') builder.json(http.body) builder.append(', System.Text.Encoding.UTF8, "application/json");') } } builder.line() builder.line('HttpResponseMessage response = await client.SendAsync(request);') builder.line('response.EnsureSuccessStatusCode();') builder.line('string responseBody = await response.Content.ReadAsStringAsync();') builder.line('Console.WriteLine(responseBody);') builder.outdent() builder.line('}') builder.outdent() builder.line('}') builder.outdent() builder.line('}') builder.outdent() builder.line('}') return builder.output() } } as Client