【GeneXus】HTTPプロシージャでステータスコード設定

転職したらGWも仕事になった。Oqiitaです。
↑前のブログの時の書き方を思い出して書いてみたw

タイトルの通り、ステータスコードを設定したい。

参考ページ

https://stackoverflow.com/questions/69199232/change-http-status-code-in-genexus-procedure-rest

↑のヤツはRESTのステータスコードを設定したいって質問に対して
GX17U2以降?だとAPIオブジェクト使って返却しろ。
それ以外だったらネイティブコード使えよ!って言ってる。

やりたかったこと

Call protocol=HTTPのプロシージャ(以下HTTPプロシージャ)で
ステータスコード(今回は400 Bad Request)を設定したい。

環境

・GeneXus17 U6
・IIS C#

HTTPプロシージャ

まずは適当にHTTPプロシージャを作成。ヘッダーも何もないポンコツ。

実行結果

開発者ツールで見てみる。

このプロシージャをいろいろする。↓こんな感じ。

Procedure - test2

// SDT作成
&SDT1.code = "999"
&SDT1.message = "Error Error Error"

// Header を設定
&HttpResponse.AddHeader(!"Content-Type", !"application/json; charset=utf-8")

// Body(文字列) を設定
&HttpResponse.AddString(&SDT1.ToJson())

// StatusCode を設定
CSHARP [!&HttpResponse!].Response.StatusCode = 400;

Return

で、実行。

想定通りの400で画面にもJSONのエラーメッセージが表示されました。なんで背景黒くなったんだ?
(ここはJsonじゃなくてもなんでも良し。)

JAVAだったら

&statusCode = 400
java context.getHttpContext().getResponse().setStatus([!&statusCode!]);

まとめ

ダウンロード系のHTTPプロシージャの安全対策としていいかもしれないです。
(普通にエラーページへの遷移でいいと思うけどね。。。)

ネイティブコード書きたくないPJにとっては
全然使えない情報でしたw

以上

おまけ

理論上リダイレクトもできる。

リダイレクトのステータスコードは302とか。
(用途によっていろいろあるから、詳しくは知らん)
https://www.symmetric.co.jp/blog/archives/123

Procedure - test2

CSHARP [!&HttpResponse!].Response.StatusCode = 302;
&HttpResponse.AddHeader(!"Content-Type", "text/html; charset=UTF8")
&HttpResponse.AddHeader(!"location", &HttpRequest.BaseUrl + Error_Panel.Link())

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください