2017-01-30 18 views
1

私はC#(http://my.site/)で作成されたWebサイトを持っています。今、私はそのドメインにマージしてhttp://my.site/apiで聞きたいWeb APIプロジェクトを持っています。彼らはVS2013の2つの別々のプロジェクトです。ホストWebApiと同じドメインのC#サイト

私はデフォルト(ホーム)MVCコントローラが/api/に応じることを期待し、(WebApiConfig.csまだrouteTemplate: "api/{controller}/{id}"でWEBAPIルート)サーバーに/api/サブフォルダへのWeb APIをアップロードしようとしたし、それにMVCのルートをマップします。 (WebAPIののMVCのルーティング中)MVCルート:

routes.MapRoute(
     name: "Default", 
     url: "{controller}", //Also api/{controller} 
     defaults: new { controller = "Home", action = "Get", id = UrlParameter.Optional } 
    ); 

しかし、私はC#のウェブサイトで、「サーバーエラー404」などhttp://my.site/api//http://my.site/api/homeにアクセスしたときに、私は、このエラーの性質を理解していないが(最も可能性が高い設定の取得ルートフォルダで)、IISが/api/フォルダ内のデフォルトのアプリケーションを提供すると考えられます。

は、だから私はWebApiConfig.Register(GlobalConfiguration.Configuration);からGlobal.asaxのApplication_Start())を追加し、追加WebApiConfig.csにApp_StartC#プロジェクトのフォルダ(およびそれぞれの名前空間を使用しては)問題を解決するかどうかを知りたいです。これは本当に簡単すぎるので、私はそれがうまくいくとは思えないので、私は正しい方向に私を向ける人が必要です、または私はasmxに戻る罪を犯すでしょう。

もしそうでなければ、C#WebサイトとWebAPIを同じドメインにどのように持つことができますか?

+0

WebSiteAがWebSiteBのリクエストを聞いて応答することを期待していますか? –

+0

私はWebForms(C#)のWebサイトを持っており、作成したWebAPIを追加したいと思います。 – Tiago

+3

あなたのロジックを共有dllに入れて、既存のWebフォームプロジェクトにWeb APIライブラリを追加し、必要に応じてWebアプリケーションライブラリを呼び出してライブラリに呼び出してみましょう。そうすれば、必要な場合にはスタンドアロンソリューションとして再展開することができますが、同じプロジェクトで直接コントローラをホストすることができます。私たちは現在、Web APIコントローラをレガシープロジェクトの1つに必要としているので、これはまったく問題はありません。 – Igor

答えて

4

サーバー上の同じbinフォルダ内に2つの別々のdll(独自のルーティングルールを持つ)を実行したいとします。それは間違いなくあなたのサイトのルーティングでいくつかの競合を引き起こす可能性があります。これを行う適切な方法は、別のサーバーでapiプロジェクトをホストし、http://api.my.site/などのサブドメインを使用することです。こうすることで、C#サイト(http://my.site/)がapi(http://api.my.site/)にアクセスできるようになります。そして、あなたのdllは、ルーティングルールを含めて、別々のままです。

+0

これは合理的な提案ですが、現在の標準であると思われる 'my.site/api /' URLを持つ可能性を排除します。 – Tiago

+1

通常は、すべてのソリューションが1つのソリューションに含まれている場合は、「my.site/api」のようなものを使用します。 'api.my.site'のようなものは、通常、2つの別々の解決策があるときに使用されます。そして、 'api.my.site'はまったく珍しいことではありません。 –

+0

私はそれがSEOに優しいソリューションであることを認識しています。同じサーバーフォルダ(2つのルートは '/ api'のルートにあります)で2つのプロジェクトを実行することは不可能/乱雑であれば、 – Tiago

関連する問題