LIFT를 사용하여 RESTful API를 제공하고 있으며 POST에서 CORS (Cross-Origin Resource Sharing)를 사용하여 요청을 허용하도록이 API를 원합니다. GET 요청을 처리하는 CORS가 있습니다.HTTP OPTIONS verb handling with LIFT
크로스 원본 POST가 주어진 URL에서 OPTIONS을 먼저 호출하고 LIFT로 OPTIONS 요청을 받아들이는 방법을 찾지 못해서 문제가 있습니다.
내 질문은 : LIFT에서 주어진 경로에 대해 HTTP 동사의 OPTIONS를 허용 할 수 있도록 mixi하거나 내 serve{}
블록에 쓰려면 무엇이 필요합니까?
지금 사용하여 컬 내가 얻을 :
curl -X OPTIONS http://localhost:8080/path => [404]
내가-M5 2.4 및 스칼라 2.9.1
편집 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
몇 가지 조언이 필요한 내 바보 같은 구현으로 질문을 업데이트했습니다. 물론 메일 링리스트에도 올릴 것입니다. –