无法从 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
我在一个小网站 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