Общий проход через класс для GET, POST, PUT, DELETE с углового сайта на веб-API

0

У меня есть угловое веб-приложение, развернутое на сервере1, и веб-api существует на сервере2. Наши архитекторы говорят, что в server2 будут включены брандмауэры, чтобы весь запрос был заблокирован, кроме сервера1 [веб-сайт]. Это означает, что я не буду напрямую отправлять запросы из своих угловых сервисов [js files]. Поэтому они хотят, чтобы я создал контроллер WebApi на своем угловом веб-сайте, который выполнил бы переход через представление в веб-api и вернет результат обратно. Кто-нибудь делал это раньше? Если да, можете ли вы дать некоторые рекомендации?

  • 1
    Не проще ли разработать какую-то аутентификацию в API server2? Какой-то ключ доверия, который знают только вы и который может быть проверен на стороне сервера? И как server2 узнает, что вы отправляете запрос с server1? Не имеет особого смысла ..
  • 0
    @jpgrassi, webapi уже развернут на server2 и изменения в нем ограничены. Я не сетевой эксперт. Но я понял, что в DMZ будут очень ограниченные серверы, на которых существуют server2 и sever1, и он будет полностью заблокирован от всех запросов, поступающих за пределы этой DMZ. Я не знаю, как они это делают. Но я убедился, что не могу проверить это локально со своей машины. Когда я развернул свои изменения на сервере server1, я смог заставить его работать.
Теги:
asp.net-web-api
.net-4.5.2

1 ответ

0
Лучший ответ

Я получил некоторую помощь отсюда. Ниже мой класс:

using System.Configuration;
using System.Net.Http;
using System.Net.Http.Formatting;
using System.Threading.Tasks;
using System.Web.Http;

namespace MyWebsite.Controllers
{
    public class ProxyController : ApiController
    {
        private readonly string _baseUrl = ConfigurationManager.AppSettings["WebApiBaseUrl"];

        /// <summary>
        /// Generic Pass through Get Method
        /// </summary>
        /// <param name="url">Url for Get Submission</param>
        /// <returns></returns>
        [HttpGet]
        public async Task<object> GetAsync(string url)
        {
            var client = new HttpClient();
            var response = await client.GetAsync(_baseUrl + url);
            return await response.Content.ReadAsAsync<object>();

        }

        /// <summary>
        /// Generic Pass through Post Method
        /// </summary>
        /// <param name="url">Url for Post Submission</param>
        /// <param name="data">Data for Post</param>
        /// <returns></returns>
        [HttpPost]
        public async Task<object> PostAsync(string url, object data)
        {
            var client = new HttpClient();
            var response = await client.PostAsync(_baseUrl + url, data, new JsonMediaTypeFormatter());
            return await response.Content.ReadAsAsync<object>();

        }

        /// <summary>
        /// Generic Pass through Put Method
        /// </summary>
        /// <param name="url">Url for Put Submission</param>
        /// <param name="data">Data for Put</param>
        /// <returns></returns>
        [HttpPut]
        public async Task<object> PutAsync(string url, object data)
        {
            var client = new HttpClient();
            var response = await client.PutAsync(_baseUrl + url, data, new JsonMediaTypeFormatter());
            return await response.Content.ReadAsAsync<object>();

        }

        /// <summary>
        /// Generic Pass through Delete Method
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        [HttpDelete]
        public async Task<object> DeleteAsync(string url)
        {
            var client = new HttpClient();
            var response = await client.DeleteAsync(_baseUrl + url);
            return await response.Content.ReadAsAsync<object>();

        }
    }
}

Я не тестировал PUT и DELETE. Но уже тестировали GET и POST. Он работает нормально.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню