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

本文关键字:代理 身份验证 API-HttpResponseMessage | 更新日期: 2023-09-27 17:57:58

编辑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
    }
}

我会错过什么?

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

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

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

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

给我这个消息

错误403-此web应用程序已停止。

您尝试访问的web应用程序当前已停止,并且不接受任何请求。请尝试重新加载页面或访问它很快就会再次出现。

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

因此,在你的identity控制器中有几件事正在发生

  1. 函数名称为CCD_ 5。由于单词get在函数的名称中。任何httpget请求都将自动路由到函数。从而使得CCD_ 8是冗余的。仅当控制器中存在1且只有<1>httpget请求时,此操作才有效。如果有多个,你需要像你所做的那样完全限定url
  2. 由于您正在使用[httpget]方法属性,我可以假设您正在使用webapi2。在这种情况下,您正在使用控制器参数中的基元可以不需要完全在调用中限定参数名称。?firstname={0}更改为/{0}