更新:对于具有相同错误/行为的人,请参阅回答stackoverflow.com/a/42813181/1155847 - 我自己的愚蠢错误,但错误消息 - 没有真正的错误消息实际上是给了..所以,让我们说,行为非常奇怪..至少现在它已经解决了。
原始问题/问题:
我正在学习使用WebAPI构建REST-ful服务,您可以在以下代码下载代码:https://github.com/pluralsight-courses/Implementing-and-Securing-an-API-with-ASP.NET-Core/tree/master/Module02_ReadingData *〜请参阅下面的注意。
当我使用查询字符串localhost:8088/api/camps/1?includeSpeakers=true
调用下面代码的GET时,我无法返回参数 - 邮递员和浏览器都会给我回复"服务器未找到" ,浏览器甚至会重定向到http://www.localhost.com:8088/api/camps/1?includeSpeakers=true
...因为其他请求(例如localhost:8088/api/camps/1
和localhost:8088/api/camps
正常工作),我的行为很奇怪。
如果我调试并逐步完成,我会看到它正常运行并接收QueryString,对数据库执行它,甚至点击return Ok(camp);
行...但我从来没有得到任何返回?
的Fiddler :
[Fiddler] ReadResponse() failed: The server did not return a complete response for this request. Server returned 0 bytes.
请求计数:发送的1个字节:408(标题:408;正文:0)字节 收到:717(标题:205;正文:512)
实际表现
注意:在接收操作失败后重试此请求。
ClientConnected:14:20:36.281 ClientBeginRequest:14:20:44.067 GotRequestHeaders:14:20:44.067 ClientDoneRequest:14:20:44.067 确定网关:0ms DNS查找:0ms TCP / IP连接:0ms HTTPS 握手:0ms ServerConnected:14:20:44.294 FiddlerBeginRequest:14:20:44.294 ServerGotRequest:14:20:44.294 ServerBeginResponse:00:00:00.000 GotResponseHeaders:00:00:00.000 ServerDoneResponse:14:20:44.537 ClientBeginResponse:14:20:44.537 ClientDoneResponse:14:20:44.538
总体经历:0:00:00.470
响应字节(按内容类型) -------------- text / html:512~ headers~:205
环境:
在Windows 10,Visual Studio 2017,IIS Express,localhost端口8088上运行,未配置SSL。
控制器:
using Microsoft.AspNetCore.Mvc;
using MyCodeCamp.Data;
namespace MyCodeCamp.Controllers {
[Route("api/[controller]")]
public class CampsController : Controller {
private readonly ICampRepository _campRepository;
public CampsController(ICampRepository campRepository) {
_campRepository = campRepository;
}
[HttpGet]
public IActionResult Get() {
try {
var camps = _campRepository.GetAllCamps();
return Ok(camps);
} catch { }
return BadRequest();
}
[HttpGet("{id}")]
public IActionResult Get(int id, bool includeSpeakers = false) {
try {
var camp = includeSpeakers
? _campRepository.GetCampWithSpeakers(id)
: _campRepository.GetCamp(id);
if (camp == null) {
return NotFound($"Camp with id '{id}' was not found.");
}
return Ok(camp);
} catch { }
return BadRequest();
}
}
}
〜注意从https://github.com/pluralsight-courses/Implementing-and-Securing-an-API-with-ASP.NET-Core/tree/master/Module02_ReadingData克隆时首先执行dotnet restore
并在MyCodeCamp.Data
文件夹中确保执行dotnet ef database update
以初始化数据库,如果你愿意,你将无法运行样本。
答案 0 :(得分:1)
当您提出请求时,请务必在localhost之前包含http://,否则fiddler将尝试执行DNS请求(这就是www.localhost.com重定向的原因)。如果这不起作用,请尝试Postman而不是Fiddler。我发现它更容易。
答案 1 :(得分:1)
确定,
这是我的自己的错误 - 但对于遇到同样问题的人,我在这里回答这个问题作为参考,因为我得到的错误(参见我最初的问题)是不明显:/。
确保您在ReferenceLoopHandling.Ignore
上配置了services.AddMvc
:
// Add framework services.
services.AddMvc()
.AddJsonOptions(opt => {
opt.SerializerSettings.ReferenceLoopHandling =
ReferenceLoopHandling.Ignore;
});
;