我使用LIFT來提供RESTful API,並且我希望此API允許使用CORS(跨源資源共享)進行POST的請求。我確實有CORS使用GET請求。HTTP選項使用LIFT處理動詞
我遇到問題了,因爲交叉源POST首先在給定的URL上調用OPTIONS,而我還沒有弄清楚如何使用LIFT接受OPTIONS請求。
我的問題是:我需要混合或寫入我的serve{}
塊,以便我可以允許在LIFT中給定路徑使用HTTP動詞OPTIONS?
現在使用curl我得到:
curl -X OPTIONS http://localhost:8080/path => [404]
我使用LIFT 2.4-M5和Scala 2.9.1
編輯:基於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。
我對Scala的技術水平肯定很低,所以我希望有人能提供一些更簡單的解決方案,因爲我確信我缺少一些東西。
是的,我使用RestHelper。我會看到如何擴展RequestType。這些都是非常好的點子,謝謝!如果沒有人提出更好/更簡單的答案,我會在24小時內接受此答案。 – 2012-04-05 20:52:14
好。請確保它在郵件列表中正確顯示,因爲我認爲這會是一個有用的功能。 – pr1001 2012-04-06 09:32:00
我用自己愚蠢的實現更新了這個問題,需要一些建議。我也會發布到郵件列表當然。 – 2012-04-06 20:03:05