首页 > 解决方案 > 从一个 WebAPI 重定向到另一个 WebAPI 并获取响应

问题描述

我想创建一个主/核心 api。想检查某个参数值并重定向到托管在同一服务器中的外部 api。我有一个带有 uri http://hello.test.com/auth的 api这需要两个身份验证参数用户名和密码。现在我添加第三个参数让我们说区域。

{
"Username":"jason",
"Password":"bourne",
"Area":"mars"
}

现在来到主 api,如果使用这个 uri 例如http://master.test.com/v1/mster并且我传递用户名、密码和区域,并且如果区域的值是让我们说“mars”,它应该调用具有 uri http://mars.test.com/auth的外部 mars api ,执行验证过程并在主 api 中返回响应。这可能吗?

使用我的 /auth api,我有这个控制器返回响应:

    [HttpPost]
    [Route(ApiEndpoint.AUTH)]
    public HttpResponseMessage Auth(Login authBDTO)
    {
        if (!ModelState.IsValid)
            return Request.CreateResponse(HttpStatusCode.BadRequest, ModelState);

        using (AccountBusinessService accountService = new AccountBusinessService())
        {
            var result = accountService.Auth(authBDTO);
            return Request.CreateResponse(HttpStatusCode.OK, result);
        }
    }

任何帮助表示赞赏。在这里找不到这个确切的场景。对不起,如果太天真了。

标签: asp.netasp.net-web-api

解决方案


找到了解决方法。这完成了工作。

    [Route(ApiEndpoint.SAS)]
    public IHttpActionResult esp(Login auth)
    {
        if (auth.Coop == "PMC")
        {
            var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://localhost:60069/api/v1/auth");
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Method = "POST";

            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                string json = new JavaScriptSerializer().Serialize(new
                {
                    Username = auth.UserName,
                    Password = auth.Password
                });

                streamWriter.Write(json);
            }

            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {

                var result = streamReader.ReadToEnd();
                dynamic obj = JsonConvert.DeserializeObject<ExpandoObject>(result);
                obj.BaseUrl = "http://localhost:60069/api/v1";

                return Ok(obj);

            }

        }

推荐阅读