質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.62%

ASP.NET WebAPIアプリを複数IISに配置し、URLパラメータによって呼出先のアプリを変えたい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,977

Rocky

score 138

 前提・実現したいこと

ASP.NET WebAPIアプリを作成していますが、クライアント環境のバージョンが複数想定され
1つのWebAPIプログラムの中でバージョン管理をして挙動を変えるのではなく
バージョンごとのプログラム(=ソリューション)を作成して、常に複数動作させたいと考えています。

具体的には、WebAPI "A-v1.0" と WebAPI "A-v2.0" を別々のソフトウェア、ソリューションとして作成して
外部公開しないwindowsサーバーのIIS状に2つを同時に配置・実行する。
URLを叩くとき、例えば"http://[固定ドメイン]/api/v1.0/aaa" と叩けば"A-v1.0"のaaaメソッドが呼び出される("A-v2.0"プログラムは動作に関与しない)といった具合を想定しています。

"A-v1.0"プログラムでのルーティング動作を規定すればhttp://[固定ドメイン]/api/v1.0/以降のパラメータによって挙動を制御できることは確認できましたが、
URLリクエストがhttp://[固定ドメイン]/api/v1.0/なのかhttp://[固定ドメイン]/api/v2.0/なのかによって、呼び出すプログラムそのものを変更したい場合は、どの設定を変更すればよいのでしょうか。あるいはどの分野?システム?について勉強すればよいのでしょうか。

ASP.netで作成しているWebAPIのソリューション単位では管理できないことではないかと考えています。

※単一のwebAPIプログラムにおけるバージョン管理については、下記などを見て解決しています。名前空間で挙動が変えられるのですね。
https://blogs.msdn.microsoft.com/webdev/2013/03/07/asp-net-web-api-using-namespaces-to-version-web-apis/

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

一つのAPIの中でクライアント別のAPIを両立するのではなく、
クライアント別に独立して作るAPIを一つのIISに配置したいってことでよいですかね?
普通に仮想ディレクトリを切ればいいんではないでしょうか。

IIS-ROOT
 └ API
  ├ API1
  │ └ ForClientA
  └ API2
    └ ForClientB

便宜的にAPIという名前の空アプリケーションを切り、(これはIISのROOTでもいいと思います)
ClientA用のAPI1を仮想ディレクトリ作って配置、
同じくClientBをAPI2に配置。
これでアプリケーションルートのURLは同じで、https://domain/API/API1とアクセスすればForClientAのWEBアプリケーションへルーティング出来ますし、末尾セグメントを変えればBにアクセス出来るはずです。

✕:ご教授
◯:ご教示

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/15 11:09

    IISの基本設計について理解が足りず、ご面倒をおかけしました。
    仮想ディレクトリというワードについてよく調べてみます。
    また具体的な実装方法と図まで"ご教示"いただき、誠にありがとうございました。
    1つのゴールを示していただいたことはIISという未開の地へ旅立つ私にとって大変助かりました。

    キャンセル

  • 2018/03/15 12:06

    IIS 上で ASP.NET Web アプリが動作する環境は、今は「仮想ディレクトリ」とは呼ばずに「アプリケーション」と呼んでます。

    キャンセル

+1

複数の ASP.NET Web アプリを一つの IIS にデプロイすると言うのは普通に & 常識的に行われていることです。

複数の Web アプリに複数の Web API が含まれていても同じです。

何が質問者さんの問題・課題なのかわかりません。その辺りを詳しく書いてください。

その際は、アプリの開発環境と、運用環境をできるだけ詳しく書いてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/03/15 13:14

    本件については早々のレスをありがとうございました。
    早速検証作業にはいっており、実装中なので厳密には解決ではありませんが、
    必要な情報、概念はShikaTechさんからいただけたのではないかと思っています。
    過不足や補足がありましたら他の初学者のためにもコメントいただけますと幸いです。

    キャンセル

  • 2018/03/15 14:46

    不明点を明確にしてもらえないと回答はもちろんコメントも難しいです。何が分からないか、どういう情報が必要かを明確にしてもらえればできる範囲で回答します。

    キャンセル

  • 2018/03/15 14:59

    ご丁寧にありがとうございました。
    では、現在トピックスを立てた時点での疑問点は解消しましたので、一旦クローズとさせてください。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる
  • トップ
  • C#に関する質問
  • ASP.NET WebAPIアプリを複数IISに配置し、URLパラメータによって呼出先のアプリを変えたい