net::ERR_CONNECTION_RESET 200 (OK) 在进行GET方法时
net::ERR_CONNECTION_RESET 200 (OK) 在进行GET方法时
我通过将一个BuyerID作为外键添加到另一个Buyer类来修改了我的Apartments Model类,如下所示:
public class Apartment { [Key] public int ID { get; set; } public string Title { get; set; } public int NbofRooms { get; set; } public int Price { get; set; } public string Address { get; set; } public int BuyerId { get; set; } }
另外,我还有以下的Buyers Model类:
public class Buyer { [Key] public int ID { get; set; } public string FullName { get; set; } public int Credit { get; set; } public ICollectionapartments { get; set; } }
因此,它还包含了一个Apartments的集合。
由于这个原因,也许我的Get方法不再工作,并返回以下错误:GET http://localhost:54632/api/Apartments net::ERR_CONNECTION_RESET 200 (OK)。
唯一不工作的GET方法是这个:
// GET: api/Apartments [HttpGet] public IEnumerableGetApartments() { return _context.Apartments; }
其他方法如下:
// GET: api/Apartments/5 [HttpGet("{id}")] public async TaskGetApartment([FromRoute] int id) { if (!ModelState.IsValid) { return BadRequest(ModelState); } var apartment = await _context.Apartments.SingleOrDefaultAsync(m => m.ID == id); if (apartment == null) { return NotFound(); } return Ok(apartment); }
正常工作。如果我在Chrome上尝试链接,它会返回apartments,但如果我在Postman或Angular应用程序上尝试,它会返回错误。这个错误的原因是什么?
谢谢。
当执行GET方法时,出现(net::ERR_CONNECTION_RESET 200 (OK))的问题通常是由于数据序列化过程中创建了自引用循环导致的。根据您最近所做的更改,看起来您也在对象树中创建了一个自引用循环,通过从Apartments引用回Buyer。
Json.Net对此感到不满,并放弃序列化。我原本期望会抛出异常,就像这个问题中描述的那样,但是我并没有得到异常,而是遇到了您所描述的相同症状。
如果您遇到了相同的根本问题,可以通过在启动配置中设置JSON.Net来检测和忽略自引用循环来解决,具体操作可以参考这里,或者对于Asp.net Core参考这里。
Asp.Net的解决方法如下:
HttpConfiguration config = GlobalConfiguration.Configuration; config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
Asp.net Core的解决方法如下:
services.AddMvc().AddJsonOptions(options => { options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; });
感谢您提供的示例:stackoverflow.com/a/23461179/1979190中的对象相互引用。
文章内容如下:
在使用GET方法进行API请求时,出现了(net::ERR_CONNECTION_RESET 200 (OK))的错误。为了解决这个问题,我们可以按照以下步骤进行操作。
首先,打开Chrome浏览器,按下F12键打开开发者工具,并切换到网络选项卡。找到你的API请求,然后选择“复制” > “复制为cURL”。
接下来,我们可以将cURL请求与Postman请求进行对比,以查看其中的区别。通过对比,我们可以找到问题所在。
cURL请求如下:
curl "http://localhost:54632/api/Apartments" -H "Connection: keep-alive" -H "Cache-Control: max-age=0" -H "Upgrade-Insecure-Requests: 1" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" -H "Accept-Encoding: gzip, deflate, br" -H "Accept-Language: en-US,en;q=0.9" --compressed
在这里,我们可以看到cURL请求是一个XML请求。但是,我相信Postman尝试请求的是JSON数据。首先,我们需要检查这一点。
有人问道,如何与Postman进行比较?Postman只是说连接到localhost:54632/api/Apartments时出现了错误。
此外,在Chrome浏览器中也出现了相同的错误,但是可以成功获取到apartments,而在Postman中却无法获取。
根据以上信息,我们可以得出以下结论:
问题的原因是API请求的数据格式不一致。cURL请求是一个XML请求,而Postman尝试请求的是JSON数据。
解决方法是将cURL请求的数据格式修改为JSON格式,以与Postman请求保持一致。
希望以上内容能够帮助解决(net::ERR_CONNECTION_RESET 200 (OK))的问题。