У меня есть Asp.net MVC приложение, которое в настоящее время хорошо работает с использованием связывателя модели по умолчанию и URL-адресов со сложными параметрами, такими как:
example.com / Controller / Action? A = привет & b = world & c = 1 & d = 2 & e = 3 (обратите внимание на знак вопроса)
Различные URL-адреса автоматически отображаются на параметры метода действия с использованием встроенного связывателя модели. Я хотел бы продолжить использовать стандартную модель связующего, но мне нужно избавиться от строки запроса. Мы хотим поместить эти URL-адреса за CDN, который не поддерживает ресурсы, которые различаются в зависимости от строки запроса (фронт Amazon Cloud) , поэтому нам нужно удалить вопросительный знак из наших URL-адресов и сделать что-то глупое, как это
example.com / Controller / Action / a = привет & b = мир & c = 1 & d = 2 & e = 3 (без знака вопроса)
Эти URL-адреса используются только через AJAX, поэтому я не заинтересован в том, чтобы сделать их удобными для пользователей или SEO. Я хочу просто сбросить знак вопроса и сохранить весь мой код точно таким же. Проблема в том, что я не уверен в том, как продолжать использовать связыватель модели MVC, и отказ от него будет большой работой.
Я не хочу использовать сложный маршрут для сопоставления своих объектов , как этот вопрос был , и вместо этого я планирую использовать один простой маршрут, подобный приведенному ниже
routes.MapRoute(
"NoQueryString", // Route name
"NoQueryString/{action}/{query}", // 'query' = querystring without the ?
new {
controller = "NoQueryString",
action = "Index",
query = "" } // want to parse with model binder - By NOT ROUTE
);
Вариант 1 (предпочтительно): OnActionExecuting
Я планирую использовать значение catchall «query» на вышеприведенном маршруте, чтобы вставить старую строку запроса в связыватель модели по умолчанию перед выполнением действий контроллера с использованием метода OnActionExecuting в моем контроллере. Тем не менее, я немного не уверен, смогу ли я просто добавить знак вопроса. Могу ли я сделать это? Как бы вы порекомендовали изменить URL?
Вариант 2: пользовательская модель Binder
Я также мог бы создать своего рода связыватель пользовательских моделей, который просто указывает связующему модели по умолчанию обрабатывать значение «запрос» как строку запроса. Вы бы предпочли этот метод? Можете ли вы указать мне соответствующий пример?
Я немного обеспокоен тем, что это крайний случай, и хотел бы получить некоторую информацию, прежде чем я начну пытаться реализовать Вариант 1 или Вариант 2 и наткнуться на непредвиденные ошибки.