编辑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
}
}
我能错过什么?
答案 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
控制器中有几件事情正在发生。
getFullName
。由于单词get
在函数名称中。任何httpget
请求都将自动路由到该函数。从而使[HttpGet]
变得多余。仅当您的控制器中存在 1 且仅 1 httpget
请求时,此方法才有效。如果有多个,则需要完全符合您的要求[httpget]
方法属性,我可以假设您使用的是 webapi2 。既然如此,你正在使用
你的控制器参数中的原语你可以不需要完全
在您的通话中限定参数名称。 ?firstname={0}
更改为
/{0}