6

私は大規模な ASP.NET MVC/Web API プロジェクトに取り組んでおり、コントローラーを独自のプロジェクトに分離したいと考えていました (この記事http://msdn.microsoft.com/en-us/magazine/jj190803. aspx )。違いは、"通常の" MVC コントローラーではなく、ASP.NET Web API コントローラーを分離する必要があることです。

私のソリューションでは、2 つの個別のプロジェクトがあります。

  • HTML/CSS/JavaScript を提供するための 1 つの ASP.NET MVC 4 プロジェクト (標準の MVC コントローラーは使用していないことに注意してください。このプロジェクトはすべて、Web API への jQuery/Ajax 呼び出しを行うクライアント/ブラウザー側のコードです)
  • 1 つの ASP.NET Web API プロジェクト (このプロジェクトは ApiController(s) のみで、ビュー、HTML などはありません。Web API プロジェクトを自己ホストではなく IIS でホストすることを望んでいます)

とにかく、私の正確な状況を実際に説明していない他の投稿などを見たことがありますが、このソリューションを機能させるのに問題があります。

Web API コントローラーを独自の別のプロジェクトに分割し、別の MVC プロジェクトで HTML/JavaScript コードから使用するにはどうすればよいですか? また、別の MVC プロジェクトで JavaScript/jQuery コードから API のエンドポイントを呼び出すにはどうすればよいですか?

ありがとう。

4

2 に答える 2

1

Web ApiとMVCは異なるプロジェクトにあり、おそらくそれらは異なるドメインで実行されるため、クロスドメインの問題のためにクライアント側からの通信は少し難しくなります。

JSONPまたはCORSを試すことはできますが、あまり役に立ちません(1つはハックで、もう1つはブラウザーで広くサポートされていません)。そのため、Webと通信するMVCプロジェクトでラッパーMVCコントローラーを作成する必要があります。HttpClientクラスを通してのApi 。

javascriptはMVCコントローラーを呼び出します。これにより、クロスドメインの問題を回避できます。

于 2012-10-15T16:59:15.720 に答える
0

API コントローラーを別のプロジェクトに分けることができますが、それで問題ありません。必要なすべてのアセンブリが参照されていることを確認してください。Nuget パッケージを確認して、それらがすべて揃っていることを確認することをお勧めします。
API と Web を分離するには、適切なルーティングを使用するだけで十分だと思います。MVC プロジェクトの App_Start フォルダーにある "WebApiConfig.cs" を確認します。API ルーティングは基本的に "API/..." が先頭にあるため、mvc サイトを混乱させることはありません。したがって、最後に次のようなものが得られます。

 http://localhost/products
 http://localhost/api/products

最初は mvc サイトでリクエストを処理し、2 番目は WebApi でリクエストを処理します。

于 2012-10-15T16:01:49.647 に答える