无法从 Web API 呼叫获得响应

Cannot get a response from a Web API call

我在一个小网站 TreeController 控制器中有以下内容 API:

    [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 调用此操作时,我被告知

Could not get any response There was an error connecting to 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);

然后我看到 Postman Could not get any response 尽管没有出现异常;在调试代码时,看起来一切正常,对 Values 控制器的请求也正常。

您的操作方法应该 return 特定结果类型(JsonResult 当您 return 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);
    }

[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