我尝试编写api控制器并且遇到了一些问题:在向WebApi发布消息后没有响应。我尝试谷歌搜索,我找到了一些答案,但它并不适合我。我不明白为什么。
http 发布请求的代码(来自here,它只是来自简单的mvc控制器的示例):
public ActionResult Test()
{
RunAsync().Wait();
return null;
}
static async Task RunAsync()
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:50984/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// HTTP POST
var gizmo = new ErrorModel
{
Key = "2ccab87f5f904d3688a28b1a1fb4269b",
Name = "HTTP Error 404"
};
HttpResponseMessage response = await client.PostAsJsonAsync("exceptionregistration/handle", gizmo);
if (response.IsSuccessStatusCode)
{
}
}
}
WebApi控制器:
public class HandleController : ApiController
{
[System.Web.Http.HttpPost, ValidateInput(false)]
public HttpResponseMessage Post([FromBody]ErrorModel errorData)
{
try
{
// some code
}
catch (Exception ex)
{
Logger.error(ex);
return null;
}
return Request.CreateResponse(HttpStatusCode.OK, "value");
}
}
此行从未完全执行过(无回复):
HttpResponseMessage response = await client.PostAsJsonAsync("exceptionregistration/handle", gizmo);
出了什么问题?当我等待回复时为什么没有结果呢? 也许这是将json消息发布到web api控制器的更好方法吗?
答案 0 :(得分:1)
我认为你因RunAsync().Wait();
而陷入僵局。您的Test()
方法阻止了上下文线程,等待RunAsync()
完成,RunAsync()
正在等待上下文空闲,以便它可以完成。 Stephen Cleary的博客详细描述了这个问题:link。
解决方案是更改签名以允许“{等待”RunAsync()
:
public ActionResult Test()
至public async Task<ActionResult> Test()
和
RunAsync().Wait();
至await RunAsync();
答案 1 :(得分:0)
您可以使用fiddler
查看您的API是否有效。