无法从Web API调用获得响应

时间:2018-03-11 07:49:24

标签: asp.net-mvc asp.net-core-mvc postman asp.net-mvc-controller

我在小型网络API的TreeController控制器中有以下内容:

    [HttpGet("GetDirectories")]
    public IActionResult GetDirectories()
    {
        var baseDir = _config["QuickShare:BaseDir"];
        if (string.IsNullOrWhiteSpace(baseDir))
        {
            throw new InvalidOperationException("'QuickShare:BaseDir' is not configured");
        }
        var ret = GetDirectories(baseDir); ;
        return Json(ret);
    }
    private List<DirectoryInfo> GetDirectories(string parentDir)
    {
        var dirInfo = new DirectoryInfo(parentDir);
        return dirInfo.GetDirectories("*", SearchOption.TopDirectoryOnly).ToList();
    }

当我尝试从Postman调用此动作时,我会被告知

  

无法获得任何回复连接时出错   http://localhost:59243/api/Tree/GetDirectories

现在,项目模板附带的默认测试控制器保持不变:

[Route("api/[controller]")]
public class ValuesController : Controller
{
    // GET api/values
    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] {"value1", "value2"};
    }
    ...
}

当我在Visual Studio中运行API时,我可以从Values控制器获得正确的响应,但不是来自TreeController,但它们几乎完全相同。并且,当我调用Tree / GetDirectories`动作时,该动作方法中的断点被击中,我可以单步执行我的方法所具有的几行,并且它们都可以正常执行。

只有当行动的最后一行执行时,问题才会显现:

return Json(ret);

然后我得到了邮差Could not get any response,尽管没有例外;在调试代码时,看起来一切都应该正常工作,对Values控制器的请求工作正常。

1 个答案:

答案 0 :(得分:0)

您的操作方法应返回特定的结果类型(返回JsonResult时为Json)或IActionResult

示例:

 [HttpGet("GetDirectories")]
    public JsonResult GetDirectories()
    {
        var baseDir = _config["QuickShare:BaseDir"];
        if (string.IsNullOrWhiteSpace(baseDir))
        {
            throw new InvalidOperationException("'QuickShare:BaseDir' is not configured");
        }
        var ret = GetDirectories(baseDir);
        return Json(ret);
    }

OR

[HttpGet("GetDirectories")]
public IActionResult GetDirectories()
{
    var baseDir = _config["QuickShare:BaseDir"];
    if (string.IsNullOrWhiteSpace(baseDir))
    {
        throw new InvalidOperationException("'QuickShare:BaseDir' is not configured");
    }
    var ret = GetDirectories(baseDir) ;
    return Ok(ret);
}

您可以从Microsoft文档获得更多帮助:Formatting Response Data