Что я пытаюсь сделать, это построить поддержку CORS в приложении Play 2.1. Посылка заключается в том, что все, что приходит по пути/admin, должно получить заголовки CORS в ответе. Это работает достаточно хорошо с решениями для вырезания и вставки, которые я объединил в StackOverflow. Каждое из моих действий с контроллером использует завернутое действие, которое переводит заголовки CORS в ответ. Проблема в том, что моя наивная реализация теперь возвращает 200 OK в запросах OPTIONS для URL-адресов, которых нет в файле маршрутов! Как изменить мой наивный контроллер, чтобы подтвердить, что URL-адрес существует в файле маршрутов и 404 не найден, если я не нашел маршрут?Выполнение поиска маршрута в моих действиях
Conf/маршруты
# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~
# Home page
GET / controllers.Application.index
GET /hb controllers.Application.hb
# Admin API
POST /admin/sessions controllers.admin.Sessions.session
GET /admin/apps controllers.admin.Apps.index
OPTIONS /admin/*url controllers.admin.Admin.options(url: String)
# Map static resources from the /public folder to the /assets URL path
GET /assets/*file controllers.Assets.at(path="/public", file)
Мой Администратор Контроллер обеспечивает общие параметры обработки
object Admin extends Controller {
val log = LoggerFactory.getLogger(getClass())
def options(url: String) = CORS_Writer {
Action {
log.trace("options(url: {}", url);
/*
* I need to validate that url exists in the routes file here
* (this doesn't compile, but conceptually is what I want).
*/
if(routes(url)) { Ok } else { NotFound }
}
}
}
Я ожидаю
OPTIONS /admin/sessions HTTP/1.1
HTTP/1.1 200 OK
и
OPTIONS /admin/sessions HTTP/1.1
HTTP/1.1 200 OK
но
OPTIONS /admin/bob HTTP/1.1
HTTP/1.1 404 Not Found
Я новичок как Scala и Play и я найти в документации Play 2,1 катастрофически не хватает относительно деталей работы с маршрутами. Пожалуйста, извините меня, если этот вопрос кажется довольно простым. Я уверен, что это возможно, я просто не знаю заклинания.
Я не думаю, что это сработает из-за моей подстановки всех ОПЦИЙ в файле маршрутов (OPTIONS/admin/* url controllerlers.admin.Admin.options (url: String). Что я сделал с этим шаблоном? сделал так, что всегда есть обработчик. –