2013-05-30 1 views
0

Что я пытаюсь сделать, это построить поддержку 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 катастрофически не хватает относительно деталей работы с маршрутами. Пожалуйста, извините меня, если этот вопрос кажется довольно простым. Я уверен, что это возможно, я просто не знаю заклинания.

ответ

0

Не распространено onHandlerNotFound достаточно хорошо?

Вы можете сделать дополнительную проверку в соответствии с различными ошибками для путей, начиная с /admin/.

+0

Я не думаю, что это сработает из-за моей подстановки всех ОПЦИЙ в файле маршрутов (OPTIONS/admin/* url controllerlers.admin.Admin.options (url: String). Что я сделал с этим шаблоном? сделал так, что всегда есть обработчик. –

Смежные вопросы