Scala HTTP选项谓词处理与提升

Scala HTTP选项谓词处理与提升,scala,lift,options,cors,Scala,Lift,Options,Cors,我使用LIFT来提供RESTful API,我希望这个API允许使用CORS(跨源资源共享)进行POST请求。我确实有COR在处理GET请求 我遇到了麻烦,因为cross-origin在给定的URL上发布了第一个调用选项,而我还不知道如何使用LIFT接受选项请求 我的问题是:我需要混合或写入我的service{}块什么,这样我就可以在LIFT中为给定路径允许HTTP动词选项 现在使用curl,我得到: curl -X OPTIONS http://localhost:8080/path =>

我使用LIFT来提供RESTful API,我希望这个API允许使用CORS(跨源资源共享)进行POST请求。我确实有COR在处理GET请求

我遇到了麻烦,因为cross-origin在给定的URL上发布了第一个调用选项,而我还不知道如何使用LIFT接受选项请求

我的问题是:我需要混合或写入我的
service{}
块什么,这样我就可以在LIFT中为给定路径允许HTTP动词选项

现在使用curl,我得到:

curl -X OPTIONS http://localhost:8080/path => [404]
我使用的是LIFT 2.4-M5和Scala 2.9.1

编辑:根据作者的建议,我试图这样扩展:

我觉得这是我需要做的更多工作,因为我不想用我自己的RequestType impl进行扩展

谈到Scala,我的技能水平肯定较低,所以我希望有人能提供一个更简单的解决方案,因为我确信我缺少一些东西。

你在使用吗?如果是这样的话,您需要指定要响应的请求类型并返回请求。Lift(尚未)中没有
选项request
可用于传递给
service()
的部分功能,但您应该能够使用自己的版本进行扩展。使用–如在
未知请求(“选项”)
–也可以做到这一点


这可能也值得在上提一下,因为CORS支持将是一个有用的补充…

非常感谢pr1001的建议。我能够通过以下方式使其工作:

import net.liftweb.http._

class RequestTypeImproved(requestType: RequestType) {
    def options_? : Boolean = requestType.method == "OPTIONS"
}

trait RestHelper extends net.liftweb.http.rest.RestHelper {
    implicit def req2ReqImproved(requestType: RequestType): RequestTypeImproved = {
        new RequestTypeImproved(requestType)
    }

    protected object Options {
        def unapply(r: Req): Option[(List[String], Req)] =
            if (r.requestType.options_?) Some(r.path.partPath -> r) else None
    }
}
然后:


是的,我正在使用RestHelper。我来看看扩展RequestType有多难。这些都是非常好的主意,谢谢!如果没有人想出更好/更简单的答案,我会在24小时内接受这个答案。好。如果可以的话,请在邮件列表上提出来,因为我认为这是一个有用的功能添加。我用自己愚蠢的实现更新了这个问题,需要一些建议。当然,我也会发邮件到邮件列表。
import net.liftweb.http._

class RequestTypeImproved(requestType: RequestType) {
    def options_? : Boolean = requestType.method == "OPTIONS"
}

trait RestHelper extends net.liftweb.http.rest.RestHelper {
    implicit def req2ReqImproved(requestType: RequestType): RequestTypeImproved = {
        new RequestTypeImproved(requestType)
    }

    protected object Options {
        def unapply(r: Req): Option[(List[String], Req)] =
            if (r.requestType.options_?) Some(r.path.partPath -> r) else None
    }
}
serve {
    case req @ "path" Options _ => {
        LiftResponse(...)
    }
}