从 angular 网站到网站 api 的 GET、POST、PUT、DELETE 通用传递 class
Generic pass through class for GET, POST, PUT, DELETE from angular website to web api
我有一个部署到服务器 1 的 angular 网络应用程序,服务器 2 中存在一个网络 api。我们的架构师说将在 server2 中启用防火墙,以便阻止除 server1 [website] 之外的所有请求。这意味着,我将无法直接从我的 angular 服务 [js 文件 ] 提交请求。所以他们希望我在我的 angular 网站中创建一个 WebApi 控制器,该控制器将通过提交到网络 api 并取回结果。有没有人这样做过?如果是这样,你能提供一些指导吗?
我从 here 那里得到了一些帮助
下面是我的 class:
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。它工作正常。
我有一个部署到服务器 1 的 angular 网络应用程序,服务器 2 中存在一个网络 api。我们的架构师说将在 server2 中启用防火墙,以便阻止除 server1 [website] 之外的所有请求。这意味着,我将无法直接从我的 angular 服务 [js 文件 ] 提交请求。所以他们希望我在我的 angular 网站中创建一个 WebApi 控制器,该控制器将通过提交到网络 api 并取回结果。有没有人这样做过?如果是这样,你能提供一些指导吗?
我从 here 那里得到了一些帮助 下面是我的 class:
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。它工作正常。