调试Web API控制器请求的方法

时间:2015-02-03 16:21:49

标签: c# asp.net-mvc asp.net-web-api

我有简单的控制台应用程序,它将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。

我该如何调试?

1 个答案:

答案 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