私のアプリケーションではブックマークレットが使用されています。MyRouteR
のCORSを許可する必要がありますので、ブックマークレットコードでこのルートをAJAXリクエストに使用できます。Yesodで原点通過リクエストを許可する
config/routesの私の最初のドラフトでは、1つの要求メソッドPUTにつきまして、MyRouteR
がサポートされました。しかし、OPTIONSメソッドもサポートする必要があることが判明しました。どのブラウザがCORSプリフライトリクエストに使用するのですか。
私は設定/ルートに以下になってしまった:
/myroute MyRouteR PUT OPTIONS
私は一種のこのためのオプションを追加するように設定/ルートを処理するテンプレートHaskellではいくつかの関連する機械があるだろう期待していましたルートのメソッドリストは自動的にCORSサポートをもたらしますが、ダイスは発生しません。世界の終わりではありませんが、それは理にかなって、そのようにエレガントに感じました。
CORSの仕事をするために、私はルートにOPTIONSハンドラを与えた:
optionsMyRouteR :: Handler RepPlain
optionsMyRouteR = do
addHeader "Access-Control-Allow-Origin" "*"
addHeader "Access-Control-Allow-Methods" "PUT, OPTIONS"
return $ RepPlain $ toContent ("" :: Text)
putMyRouteR :: Handler RepJson
putMyRouteR = do
addHeader "Access-Control-Allow-Origin" "*"
-- more stuff ...
これは動作しますが、それはとても定型だから、それは少し非Yesodic感じています。したがって、2つの質問:
- 私たちはYesodicよりも優れた形容詞を持っていますか?
- ルートがクロスオリジン要求をサポートするもう1つの良い方法はありますか?
'setHeader'が、私は「平均時間 –