API - HttpResponseMessage:(407)需要代理身份验证

时间:2016-07-21 12:30:08

标签: c# .net asp.net-mvc proxy

编辑1:其他控制器

public class identityController : ApiController
    {
        [HttpGet]
        public async Task<IHttpActionResult> getfullname(string firstName)
        {
            string name = firstName;
            return Ok(name);
        }
    }

我创建了一个使用其他解决方案的API的控制器。 我在控制器中使用的方法如下所示:

public class GetNameController : ApiController
    {
        [HttpGet]

        public async Task<IHttpActionResult> CalculatePrice(string firstName)
        {
            string _apiUrl = String.Format("api/identity/getfullname?firstName={0}", firstName);
            string _baseAddress = "http://testApp.azurewebsites.net/";

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(_baseAddress);
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                HttpResponseMessage response = await client.GetAsync(_apiUrl);

                if (response.IsSuccessStatusCode)
                {
                    return Ok(response);
                }
            }
            return NotFound();
        }

response.IsSuccessStatusCode的结果始终是false。当我检查response值时,我看到了这个结果:

 {
    StatusCode: 400, ReasonPhrase: 'Bad Request', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
    {
      Connection: close
      Date: Thu, 21 Jul 2016 12:28:21 GMT
      Server: Microsoft-HTTPAPI/2.0
      Content-Length: 334
      Content-Type: text/html; charset=us-ascii
    }
}

我能错过什么?

1 个答案:

答案 0 :(得分:1)

 string _apiUrl = String.Format("api/identity/{0}", firstName);

这是假设您的网址是正确的,并且您的testapp已启动并正在运行。即使我点击它azure告诉我你的应用程序已停止。您需要先启动应用,然后将字符串_apiUrl更改为上面的建议。

http://testapp.azurewebsites.net/api/identity/getfullname?firstName=steve

给我这条消息

  

错误403 - 此网络应用已停止。

     

您尝试访问的网络应用目前已停止并且确实已停止   不接受任何要求。请尝试重新加载页面或访问它   很快。

     

如果您是网络应用管理员,请找到常见的403错误   场景和解决方案。进一步的故障排除工具和   建议,请访问Azure门户网站。

所以identity控制器中有几件事情正在发生。

  1. 函数名称为getFullName。由于单词get在函数名称中。任何httpget请求都将自动路由到该函数。从而使[HttpGet]变得多余。仅当您的控制器中存在 1 且仅 1 httpget请求时,此方法才有效。如果有多个,则需要完全符合您的要求
  2. 由于您使用[httpget]方法属性,我可以假设您使用的是 webapi2 。既然如此,你正在使用 你的控制器参数中的原语你可以不需要完全 在您的通话中限定参数名称。 ?firstname={0}更改为 /{0}