Matches HTTP requests based on their method.


 * Rejects all requests whose HTTP method does not match the given one.
def method(httpMethod: HttpMethod): Directive0 =
  extract(_.request.method).flatMap[HNil] {
    case `httpMethod`  pass
    case _             reject(MethodRejection(httpMethod))
  } & cancelAllRejections(ofType[MethodRejection])


This directive filters the incoming request by its HTTP method. Only requests with the specified method are passed on to the inner route. All others are rejected with a MethodRejection, which is translated into a 405 Method Not Allowed response by the default RejectionHandler.


val route = method(HttpMethods.PUT) { complete("This is a PUT request.") }

Put("/", "put content") ~> route ~> check {
  responseAs[String] === "This is a PUT request."

Get("/") ~> sealRoute(route) ~> check {
  status === StatusCodes.MethodNotAllowed
  responseAs[String] === "HTTP method not allowed, supported methods: PUT"