У меня есть Asp.net MVC приложение, которое в настоящее время хорошо работает с использованием модели связующего по умолчанию и URLs со сложными параметрами, как это:ASP.net MVC - Использование модели Binder без значений строки запроса или фантазии маршрутов
example.com/Controller/Action?a=hello & Ь = & мир с = 1 & д = 2 & е = 3 (обратите внимание на знак вопроса)
различные адреса автоматически отображаются на параметры метода действия с помощью встроенного в модельном связующем. Я хотел бы продолжить использование стандартного связующего, но мне нужно избавиться от строки запроса. Мы хотим, чтобы поставить эти URLs позади CDN that does not support resources that vary by query strings (Amazon Cloud front) так что нам нужно, чтобы удалить знак вопроса из наших URLs и сделать что-то глупое, как этот
example.com/Controller/Action/a=hello & б = мир & с = 1 & d = 2 & е = 3 (без вопросительного знака)
Эти адреса используются только с помощью AJAX, так что я не заинтересован в создании им пользователя или SEO дружественных. Я хочу просто оставить вопросительный знак и сохранить все мои коды точно так же. Сцепка есть, я не уверен, как продолжать использовать связующее для модели MVC, и отказаться от нее было бы большой работой.
Я не хочу использовать сложный маршрут на карту моих объектов like this question did и, вместо этого, я планирую использовать один простой маршрут, как один ниже
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 Я планирую использовать значение «запрос» на маршруте выше, чтобы вставить старую строку запроса в связующее устройство модели по умолчанию до того, как действия контроллера выполняются с использованием метода OnActionExecuting в моем контроллере. Тем не менее, я немного не уверен, могу ли я просто добавить знак вопроса. Могу ли я это сделать? Как бы вы рекомендовали изменить URL?
Вариант 2: Пользовательские модели Binder я также мог бы сделать какой-то заказ Model Binder, который просто говорит модель по умолчанию Связыватель для лечения на «запрос» значение как строку запроса. Вы бы предпочли этот метод? Можете ли вы указать мне пример?
Я немного обеспокоен тем, что это краевой кейс, и мне будет очень нужен вход, прежде чем я начну пытаться реализовать вариант 1 или вариант 2 и наткнуться на непредвиденные ошибки.
Бланк проверки запроса немного меня испугал. Нужно ли мне это, если бы я только добавил вопросительный знак обратно на уровне контроллера, а не при запуске приложения? – Glenn
Я предполагаю, что могу кодировать целую строку запроса, но было бы неплохо избежать двойного кодирования, поскольку значения уже закодированы. – Glenn
@ Гленн, я не понимаю ваш вопрос. Валидация важна, потому что в противном случае ASP.NET выдаст исключение, заявив, что вы пытались отправить опасных символов как часть вашего маршрута. Обычно символ '&' должен использоваться только в строке запроса, которая не является вашим делом, и вам нужно обойти ее, если вы когда-либо хотели поддерживать URL-адреса, как этот. –