我有简单的控制台应用程序,它将json数据发送到控制器。
Client.PostAsJsonAsync("http://[site].azurewebsites.net/api/Decision", report);
和控制器:
public class DecisionController : ApiController
{
private readonly TaskManager _taskManager = new TaskManager();
[HttpGet]
public Decision Get(int id)
{
return _taskManager.GetDecision(id);
}
[HttpPost]
public void Post(Decision decision)
{
_taskManager.UpdateDecision(decision);
}
}
Visual Studio调试器显示请求未到达控制器(不触发断点)。控制台应用程序不会抛出任何异常,并且报告变量不等于null。
我该如何调试?
答案 0 :(得分:0)
您可能需要查看Fiddler这是一个调试Web请求的免费工具。基本上,它监控通过您的计算机的所有Web请求,并让您看到它们的外观。您也可以直接从那里生成新的。这样,您至少可以确保您的请求格式正确。
另外,我注意到当你应该在控制器上调用一个动作时,你试图直接调用你的控制器。当您请求GET api/Decision
时,您还需要提供一种操作方法。我不太了解您的模型以正确地重构您的控制器,但这是一个基于简单用户配置文件的示例。
public class ProfileController : ApiController
{
[HttpGet]
public string FullName()
{
return "Foo Bar";
}
[HttpPost]
public void FullName(string newName)
{
// ...
}
[HttpGet]
public int Age()
{
return 22;
}
[HttpPost]
public void Age(int newAge)
{
// ...
}
}
如您所见,HttpVERB属性不用于将对控制器的请求分派给特定方法。它用于区分相关的休息动作的不同重载。在这种情况下,它用于区分获取和设置FullName和Age属性。
如果您要保持控制器的完整性,您应该请求:
POST http://[site].azurewebsites.net/api/Decision/post
GET http://[site].azurewebsites.net/api/Decision/get