从角度网站到web api的GET,POST,PUT,DELETE通用类通用

时间:2015-12-03 22:34:58

标签: angularjs asp.net-web-api .net-4.5.2

我有一个部署到server1的角度Web应用程序,并且在server2中存在web api。我们的架构师说服务器2中将启用防火墙,因此除了server1 [网站]之外,所有请求都将被阻止。这意味着,我将无法直接从我的角度服务[ js文件]提交请求。因此,他们希望我在我的角度网站中创建一个WebApi控制器,它将传递给web api并将结果取回。有没有人这样做过?如果是的话,你能提供一些指导吗?

1 个答案:

答案 0 :(得分:0)

我从here得到了一些帮助 以下是我的课程:

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。它工作正常。