LIFTを使用してRESTful APIを提供しています。このAPIでCORS(クロスソース・リソース共有)を使用したリクエストをPOSTに許可します。 CORSはGETリクエストを処理しています。LIFTを使用したHTTP OPTIONS動詞
クロスオリジンPOSTが最初に指定されたURLでOPTIONSを呼び出し、LIFTでOPTIONSリクエストを受け付ける方法がわからないため、問題があります。
私の質問は、serve{}
ブロックにmixinするか、LIFTの指定されたパスにHTTP動詞OPTIONSを許可できるようにするには何が必要ですか?
今使ってカール私が取得:
curl -X OPTIONS http://localhost:8080/path => [404]
私は-M5 2.4とScalaの2.9.1
EDIT LIFTを使用しています:pr1001さんの提案に基づいて、私はRestHelperを拡張しようとしていましたそのような:
import net.liftweb.http.provider._
import net.liftweb.http._
trait RestHelper extends net.liftweb.http.rest.RestHelper {
protected object Options {
// Compile error here with options_?
// because net.liftweb.http.Req uses LIFT's RequestType
def unapply(r: Req): Option[(List[String], Req)] =
if (r.requestType.options_?) Some(r.path.partPath -> r) else None
}
}
@serializable
abstract class RequestType extends net.liftweb.http.RequestType {
def options_? : Boolean = false
}
@serializable
case object OptionsRequest extends RequestType {
override def options_? = true
def method = "OPTIONS"
}
object RequestType extends net.liftweb.http.RequestType {
def apply(req: HTTPRequest): net.liftweb.http.RequestType = {
req.method.toUpperCase match {
case "OPTIONS" => UnknownRequest("OPTIONS")
case _ => net.liftweb.http.RequestType.apply(req)
}
}
def method = super.method
}
これは私が自分でReqを拡張する必要はしたくないので、私がする必要がある必要があり、より多くの仕事であるように私は感じますRequestType impl。
スカラについては、スキルのレベルが低いので、誰かが少し簡単な解決策を提供できることを願っています。欠けているものがあると確信しています。
はい、私はRestHelperを使用しています私はそれが次のように動作させることができました。 RequestTypeを拡張することがどれほど難しいかを見ていきます。これらは非常に良いアイデアです、ありがとう!誰もより良い/より簡単な答えを出していないなら、私は24時間以内にこの回答を受け入れます。 –
良いこれが便利な機能追加になると思うので、これが動作すればメーリングリストに持ち込んでください。 – pr1001
私はいくつかのアドバイスが必要な私の愚かな実装で質問を更新しました。私はもちろんメーリングリストに投稿します。 –