Соглашение OData URI для адресации записей, которые имеют точку в уникальном идентификаторе?

#asp.net-mvc-3 #model-view-controller #odata

#asp.net-mvc-3 #модель-представление-контроллер #odata

Вопрос:

Я использую OData в качестве API в приложении. Одна из моих таблиц базы данных имеет уникальный идентификатор, который содержит точки (.) Я пытаюсь получить доступ к записям в этой таблице, используя следующее соглашение:

http://foo.bar.com/services/v001.svc/Categories («A.B.C»)

.. но я постоянно получаю следующую ошибку:

Контроллер для пути ‘/services/v001.svc / Categories (‘A.B.C’)’ не найден или не реализует IController.

Сначала я думал, что это связано с неправильной конфигурацией в моих маршрутах, но я удалил все пользовательские маршруты и все равно получаю ту же ошибку. Доступ ко всем другим записям во всех таблицах в моей базе данных через одно и то же соглашение uri работает просто отлично. Единственное различие между этими записями и всеми остальными заключается в том, что я использую точку в столбце уникального идентификатора.

Помогите!

Ответ №1:

Проблема в том, что у Cassini (веб-сервер разработки в Visual Studio) возникла проблема с обработкой периодов в URL. Решение состоит в том, чтобы изменить свойства проекта, чтобы использовать локальный веб-сервер IIS вместо использования Cassini. Для этого:

  1. Правый клик в вашем проекте
  2. Нажмите «Свойства»
  3. Перейдите на вкладку «Веб»
  4. Измените настройки в разделе «Сервер» на «Использовать локальный веб-сервер IIS» и установите флажок «Использовать IIS Express»
  5. Следуйте инструкциям для создания виртуального каталога и т. Д.
  6. В следующий раз при отладке ваше приложение должно быть запущено в локальной установке IIS, и теперь URL-адреса должны обрабатываться правильно.

Это, конечно, предполагает, что на вашем ПК установлен IIS. Почему Cassini не любит точки, а full IIS любит? Кто знает?