私はJSONを返すWebAPIコントローラを持っています。コードは次のようになります。GetMyOffersメソッドを呼び出すときGET <URL> net :: ERR_CONNECTION_RESET
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using GetWork.Data;
using GetWork.Models.Domain;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Cors;
namespace GetWork.Controllers.Api
{
[Produces("application/json")]
[EnableCors("SiteCorsPolicy")]
public class ConversationsApiController : Controller
{
private readonly ApplicationDbContext _context;
public ConversationsApiController(ApplicationDbContext context)
{
_context = context;
}
//This one works fine
// GET: api/Conversations/5
[HttpGet]
[Route("api/conversations/getconversations/{id}")]
public List<Conversation> GetConversations(int id)
{
var conversations = _context.Conversations.Include(o => o.Offerer).Where(c => c.JobRelated.ID == id).ToList();
return conversations ?? new List<Conversation>();
}
//This one works fine
[HttpGet]
[Route("api/conversations/getmyoffers/{userId}")]
public List<Job> GetMyOffers(string userId)
{
return _context.Job.Include(c => c.Conversations).ToList();
}
}
}
、ブラウザで私はこのようなエラーを見ることができます:
GET http://localhost:8377/api/conversations/getMyOffers/70a741c2-b847-4063-ab94-7f2e93860ab6 net::ERR_CONNECTION_RESET
しかし、私は(_contextをomiting)データをハードコーディングするとき、すべてが正常に動作します。他の方法が働いています。
このような問題を引き起こす原因は何ですか?
UPDATE:
最後に私が見つけた、このようなexpection:
Newtonsoft.Json.JsonSerializationException: Self referencing loop detected for property 'job' with type 'GetWork.Models.Domain.Job'
私のモデルを確認する必要があります。
SOLUTION:
自己参照ループは、デフォルトでは、シリアライザで扱うことができませんでした。
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
シリアライズ時に循環参照をすべて無視します。それは私のために働いたが、私はそれが解決策ではなく回避策であることを認識している。 (純粋なモデルの代わりにDTOを使用することを考慮して)。
は、例えば、要求のタイムアウトを増やすことで固定することができる:あなたが_contextを削除し、ちょうどハードコーディングされたデータを返すとき、それが動作する場合
URL **が**動作していて**どちらが**動作していないかを明確にするようにコードを更新できますか? – mjwills
デバッグを試しましたか?それが正確に失敗するかチェックしてください。あなたがMSSQLを持っている場合は、問題がデータベースへの実際のクエリの前に表示されるかどうかを見るためにプロファイリングを試みることができます。他のオプションは、デバッグモードで多くの例外を捕捉するためにチェックされたCLR Exceptionsのデバッグとマーキング中にException Settingsに移動することです。 –
何らかの理由でプロファイリングがうまくいかないのですが、最終的に私は問題の根源を見つけました。 (更新をチェックしてください) –