net::ERR_CONNECTION_RESET 200 (OK) 在进行GET方法时

16 浏览
0 Comments

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 ICollection apartments { get; set; }
}

因此,它还包含了一个Apartments的集合。

由于这个原因,也许我的Get方法不再工作,并返回以下错误:GET http://localhost:54632/api/Apartments net::ERR_CONNECTION_RESET 200 (OK)。

唯一不工作的GET方法是这个:

// GET: api/Apartments
[HttpGet]
public IEnumerable GetApartments()
{
    return _context.Apartments;
}

其他方法如下:

// GET: api/Apartments/5
[HttpGet("{id}")]
public async Task GetApartment([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应用程序上尝试,它会返回错误。这个错误的原因是什么?

谢谢。

0
0 Comments

当执行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中的对象相互引用。

0
0 Comments

文章内容如下:

在使用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))的问题。

0