私の無知を許しますが、現時点では、例外をキャッチして例外に基づいてクライアントにメッセージを表示する最善の方法を理解するのに苦労していますタイプ。例外処理戦略 - リポジトリから例外をキャッチしてWebApiコントローラに渡す
マイアーキテクチャ:あなたはそれだけでDBからデータを取得し、いくつかのシナリオでは、私が原因物理的にデータなしにobject not set to an instance of an object exception
を得ることができる見ることができるように上記で
リポジトリ
Page IPageRepository.FindDefault()
{
try
{
return MapPageFromCategory.MapFromEntity(_context.tbl_Category.
FirstOrDefault(p =>
p.IsLandingPage == true
)
);
}
catch (Exception ex)
{
throw new ApplicationException("Error getting values from database :", ex);
}
}
テーブルにはNull exception
が入ります。
両方のシナリオで、私のコントローラに渡す404例外を生成したいと思います。
public class PageController : ApiController
{
private IPageRepository _pageRepository;
public PageController(IPageRepository pageRepository)
{
this._pageRepository = pageRepository;
}
// GET
[HttpGet]
[Route("")]
public Page Get()
{
return this._pageRepository.FindDefault();
}
}
私のコントローラがヒット
コントローラは、この方法だと、これらの例外のいずれかがヒットした場合、何がこれらの例外をインターセプトし、エンドクライアント(アプリを呼び出す)に渡すための最良のアプローチでしょうか?
もう一度、例外処理に対する体系的なアプローチを作成しようとしています。
ありがとうございました!
Eric Lippertの[Vexing Exceptions](https://blogs.msdn.microsoft.com/ericlippert/2008/09/10/vexing-exceptions/)を読んだことがあります。これは、最良のアプローチを策定するのに役立ちます。 – Enigmativity
'_context'は' DbContext'型ですか?はいの場合は、それぞれの 'Repository'メソッドでコンテキストを作成することをお勧めします。なぜなら、複数のスレッドが同じ '_context'を使用しようとすると、あなたは奇妙な状況に陥るかもしれないからです。 – Gabrielius
@Gabrieliusはい、それはDbContextから派生した私のエンティティコンテキストです。私の基本クラス(Generic EntityRepository)はコンテキストをインスタンス化し、派生クラス(PageRepository)ではベースからフェッチしてCtorに渡し、IoCを使用してそのリポジトリの新しいインスタンスを作成します。 –