В службах ASP.NET Web API, которые я разрабатывал, я столкнулся с проблемой, из-за которой данные POST, которые я отправлял, не были получены Контроллер. Параметр Controller был строкой, поскольку я отправлял данные JSON, но это не сработало. Я продолжал получать сообщение об ошибке, что данные POST были нулевыми, когда я ожидал, что они будут содержать мои данные JSON.

После долгих головоломок и гугления я в конце концов нашел эту очень полезную статью [^], в которой объяснялась моя проблема и различные решения. Я решил изменить свой параметр Web API на JToken, так как это было простое решение, и я быстро снова начал работать. Мне нужно опубликовать документы JSON различной формы в Web API, поэтому я столкнулся с проблемой. Конечная точка также вызывается из наших мобильных приложений с помощью Javascript, что устраняет необходимость отправки данных в виде документа JSON. Таким образом, изменение параметра со строки на JToken устранило проблему.

Следующая проблема, с которой я столкнулся, возникла при вызове конечной точки Web API из нашего мобильного приложения. Я использовал вызов AJAX для данных POST, но получил ошибку. Оказывается, проблема была в том, что я нарушал стандартную безопасность браузера. Безопасность браузера не позволяет веб-странице отправлять запросы AJAX к другому домену. Это ограничение называется политикой same-origin и не позволяет вредоносному сайту считывать конфиденциальные данные с другого сайта. Однако иногда может потребоваться разрешить другим сайтам вызывать ваш веб-API. В нашем случае мы хотели, чтобы наш веб-API вызывался из клиентов мобильного приложения.

Чтобы разрешить это, мне нужно было включить CORS в веб-API, который вызывался мобильными приложениями (было только одно). Cross-Origin Resource Sharing[^] (CORS) — это стандарт W3C, который позволяет серверу ослабить политику одного происхождения. Используя CORS, сервер может явным образом разрешать одни запросы между источниками и отклонять другие. CORS – это безопасный и надежный метод разрешения запросов из разных источников.

Я установил пакет Nuget CORS и включил CORS в Controller, и теперь все работает. Мы можем публиковать данные из мобильного приложения в нашу устаревшую серверную систему через конечные точки Web API (которые, в свою очередь, используют Azure Service Bus). .

Теперь, когда последние части головоломки решены, приятно видеть, что все движущиеся части архитектуры работают вместе.

Пользователь нашего мобильного приложения заполняет форму и отправляет данные. Данные упаковываются в документ JSON и отправляются в наш веб-API, который добавляет сообщение в служебную шину Azure. Функция Azure, связанная с служебной шиной Azure, которая прослушивает входящие сообщения, принимает сообщение и направляет запрос в механизм маршрутизации, где определяется, где требуется запрос. для маршрутизации. Запросы из нашего мобильного приложения направляются в нашу устаревшую серверную систему, где из запроса создается задача, чтобы сотрудник мог обрабатывать данные запроса от пользователя мобильного приложения.

Все это происходит без проблем и невероятно отзывчиво благодаря тщательно продуманной и разработанной архитектуре.