2017-11-25 4 views
1

に2つのRoute属性を追加して、どちらのURIがユーザの呼び出しであるかを確認し、それに従って結果を戻すのは良いコーディング方法ですか?ここでWebページアプリケーションとWeb APIの両方に同じ `Action`を使用する

は一例です:

[Route("/api/DoThis")] 
[Route("/DoThis")] 
public IActionResult DoThis() 
{ 
if (HttpContext.Current.Request.Url.AbsolutePath.StartsWith("/api")) 
    { 
     return SomeJSON(); 
    } 
    else 
    { 
     return View(); 
    } 
} 

が、これはこれを達成するための最善のアプローチですか?それとももっと直接的なものがありますか?

+1

コンテンツネゴシエーションを使用することをお勧めします。したがって、リクエストのAccept型ヘッダのコンテンツタイプに基づいて、応答が何であるかを決定します。 – Nkosi

+0

@Nkosi、ありがとう。これは正しいですか(または良い練習をしましょうか)、私は 'Action'の中で直接ヘッダをチェックしなければなりませんか?ちょうどもう一つ正確な点は、これは実際にウェブページアプリとAndroidアプリで消費可能なAPIアプリを構築するのに使用される一般的な方法ですか?誰がこの行動を呼び出して適切なデータを返すかを決定するためにヘッダーをチェックしますか? –

+2

私はこれがベストプラクティスであると言うまでは行っていません。それは実行可能なオプションです。 1つのアクションに複数のルートを使用すると機能します。どのコンテンツタイプを返すかについてアクションが交渉することにより、アクションはより柔軟になります。しかし、それらはすべてトピックに関する私の意見です。 – Nkosi

答えて

0

あなたが行っている作業の代用として、リポジトリパターンを使用することができます。ビジネスロジックをリポジトリに実装することができます。その時点でのアクションは、正しいリポジトリメソッドを呼び出してデータを取得する必要があります。

あなたは確かにコメントで示唆されているコンテンツ交渉であなたのやっていることをすることができます。 APIと「MVC」アクションを別々にしておきたい理由は、懸念事項が十分に分離されていることです。また、経験からは、ビューに渡す必要があるデータがAPIが必要です。また、大規模なチームで作業しているときに、これらのことを特別に分離することは、デベロッパーにとってもフレンドリーです。 :-)

+0

あなたの答えをありがとうが、私はそれが私の問題に関連していないことがわかった、それは私が一種の分離をする方が良いことは明らかである。しかし、私は自分のAsp.Netコアアプリケーションをさまざまな技術で簡単に利用するための最良の方法は何かを混乱させています。私のアプリケーションのWEB APIを公開して(例えば、Androidアプリからそれらを消費する)、そしてMVCが同じアプリケーションを使う良い方法を提案できますか?つまり、WEB APIとWebページを公開するAsp.Netアプリケーションです。 –

関連する問題