cURLからC#へ
curlコマンドを貼り付けると、.NETが求める場所にヘッダーを置いたHttpClientコードが得られます。
cURLからC#へは完全にブラウザ内で動作します。貼り付けたコマンドはトークンごと端末上で変換され、送信されません。
cURLからJavaへを開く
cURLからC#へ について
APIドキュメントのcurlコマンドをC#に書き直す作業は小さいのに、いつも同じ場所で失敗します。.NETはヘッダーをリクエストとコンテンツに分けており、Content-TypeはHttpContentのものでHttpRequestMessageのものではありません。誤った側に設定すると、コンパイルではなく実行時に例外になります。このツールはcurlのフラグ、つまりメソッド、ヘッダー、ボディ、そしてBasic認証になる-uを読み取り、各ヘッダーを正しい場所に置いたHttpClientのプログラムを出力します。
機能
- メソッド、ヘッダー、ボディ、Basic認証を解析
- Content-TypeをStringContentに設定(.NETの要求どおり)
- -uの資格情報をAuthenticationHeaderValueとして出力
- 非標準の動詞はHttpMethodのコンストラクターで生成
- リクエストに必要なusingディレクティブだけを付与
- JSONボディを正しいC#リテラルにエスケープ
cURLからC#へ の使い方
- ヘッダーとボディを含むcurlコマンドを貼り付けます
- 入力に合わせて生成されるC#を読みます
- コピーするか、Program.csとして保存します
- 変換できなかったフラグの警告を確認します
例
入力
curl -X POST https://api.example.com/users -H "Content-Type: application/json" -d '{"name":"Ada"}'
出力
request.Content = new StringContent(
"{\"name\":\"Ada\"}",
Encoding.UTF8,
"application/json");
メディアタイプはStringContentに渡します。request.Headersに設定するのが実行時例外の原因です。
よくあるエラーとトラブルシューティング
- Content-Typeの設定でInvalidOperationExceptionになる。 — .NETではこれはコンテンツヘッダーです。生成コードのようにHttpContent側へ設定してください。
- curlでは通るのにC#で401になる。 — 資格情報の渡り方を確認してください。-uはbase64のBasicヘッダーになり、改行付きで貼ったトークンは失敗します。
よくある質問
- curlコマンドをC#に変換するには。
- 上に貼り付けてください。メソッド、URL、ヘッダー、ボディを解析してHttpClientのプログラムを出力します。
- HttpRequestMessageにContent-Typeを設定できないのはなぜですか。
- .NETがリクエストヘッダーとコンテンツヘッダーを分けており、Content-Typeは後者だからです。前者に設定すると例外になります。
- C#でBasic認証を送るには。
- user:passwordをbase64にし、DefaultRequestHeadersでBasicスキームのAuthenticationHeaderValueとして設定します。
- curlコマンドはどこかに送られますか。
- いいえ。ブラウザ内で解析・変換されるので、含まれるトークンや鍵は端末に留まります。
関連ツール
すべての ArrayKit ツール