AspNetCore WebApi QueryString参数已处理但浏览器&邮差说"找不到服务器"

时间:2017-03-15 12:49:10

标签: c# asp.net .net-core asp.net-web-api-routing

更新:对于具有相同错误/行为的人,请参阅回答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/1localhost:8088/api/camps正常工作),我的行为很奇怪。

如果我调试并逐步完成,我会看到它正常运行并接收QueryString,对数据库执行它,甚至点击return Ok(camp);行...但我从来没有得到任何返回?

enter image description here

的Fiddler

  • 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以初始化数据库,如果你愿意,你将无法运行样本。

2 个答案:

答案 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;
        });
    ;