У меня есть угловое веб-приложение, развернутое на сервере 1, а веб-API существует на сервере 2. Наши архитекторы говорят, что на сервере 2 будут включены брандмауэры, чтобы блокировались все запросы, кроме запросов с сервера 1 [веб-сайт]. Это означает, что я не смогу напрямую отправлять запросы из моих сервисов angular [файлы js]. Поэтому они хотят, чтобы я создал контроллер WebApi на моем угловом веб-сайте, который выполнял бы передачу через веб-API и возвращал результат обратно. Кто-нибудь делал это раньше? Если да, не могли бы вы дать некоторые рекомендации?
Общий проход через класс для GET, POST, PUT, DELETE с углового веб-сайта на веб-API
comment
Не проще ли разработать какую-то аутентификацию в API server2? Какой-то ключ доверия, который знаете только вы и который можно проверить на стороне сервера? И как server2 узнает, что вы отправляете запрос с server1? Не имеет большого смысла..
- person jpgrassi   schedule 04.12.2015
comment
@jpgrassi, webapi уже развернут на server2, и изменения в нем ограничены. Я не специалист по сетям. Но я понял, что в DMZ, где существуют server2 и sever1, будет очень ограниченное количество серверов, и он будет полностью заблокирован для всех запросов, поступающих за пределы этой DMZ. Я не знаю, как они это делают. Но я убедился, что не могу протестировать его локально со своей машины. Когда я развернул свои изменения на server1, я смог заставить их работать.
- person user007   schedule 04.12.2015
Ответы (1)
Мне помог сайт здесь Ниже мой класс:
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. Он работает нормально.
person
user007
schedule
04.12.2015