転職したら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())