Я реализую настраиваемый контроллер в ASP.NET MVC и действительно хочу иметь возможность использовать двоеточие в URL-адресах, чтобы я мог идентифицировать имена классов / столбцов и их значения, например:
http://example.com/user:chaiguy
... но, очевидно, ASP.NET или IIS не допускают двоеточия в URL-адресах. Я немного покопался, и, по-видимому, это считается проблемой безопасности, но, я использую MVC и обрабатываю все URL-пути вручную (просто обрабатывая их как строки), а не связывая их с файловой системой, поэтому я почти уверен, что это не применимо.
Я также слышал разговоры о реализации специального обработчика Http или чего-то в этом роде.
Мы будем очень благодарны за любые мысли или идеи.
Э ... почему? Серьезно, зачем нарушать стандарты? - Рандольфо
...
Тогда я предлагаю вам изучить создание веб-службы. WCF - отличная технология для этого, и она хорошо размещается в IIS.
Мне нравятся URL-адреса, а WCF слишком сложен для моих целей. Я хочу, чтобы он был совместим с URL-адресами, как REST, но мог не только перемещаться по иерархиям или делать хорошо продуманные вещи. Проблема с / users / chaiguy заключается в том, что он интерпретирует иерархию там, где ее нет: в моей системе «пользователь» - это класс, а не папка. user: chaiguy означает экземпляр класса пользователя со значением «chaiguy», и это единая сущность, которая может иметь дочерние сущности. Так например:
/user:chaiguy/name
... Я хотел бы отобразить имя этой сущности. Если бы я сделал это с вашим методом, это выглядело бы так:
/users/chaiguy/name
Проблема в том, как узнать, что это за класс и какое значение? Это можно интерпретировать как
/users/chaiguy:name
в моей системе, и это не имеет смысла. Видишь, к чему я клоню? Чтобы привести немного более сложный пример, предположим, что мы хотим выбрать дочерний объект пользовательского объекта из нескольких экземпляров. Таким образом, у пользователя может быть несколько адресов электронной почты. Чтобы выбрать один, мы можем использовать:
/user:chaiguy/email:[email protected]/
Так что на самом деле это рекурсивно. Это не путь к файлу, это больше похоже на XPath (или, возможно, похоже на jQuery, исходя из того, что я еще о нем знаю). То есть это скорее выбор запроса с динамической оценкой, чем зашитый путь к файлу. Он оценивается на сервере.
Не заблуждайтесь, я не создаю здесь типичный веб-сайт или даже веб-службу.