Product.Api
WebAPI サイトに使用されるいくつかのコントローラーを含むプロジェクト (という名前) があります。コントローラは名前空間にありますProduct.Api.Controllers
。このプロジェクトには、他にもいくつかのヘルパー機能があります。これはライブラリにコンパイルされます。
という名前の別の通常の ASP.NET MVC4 Web サイトもありますProduct.Web
。これには、コントローラー (名前空間の下Product.Web.Controllers
)、モデル、およびビュー (対応するフォルダー内) があります。またGlobal.asax.cs
、ルーティング情報を持つ もあります。
サイトが IIS (.NET 4.5、IIS7、統合モードなど) で作成されている場合、Product.Api
dll を bin フォルダーにコピーします。Product.Web
がメインサイトです。
ここで、URL http://www.product.com/api/ {Controller}/{id} を WebAPI のものとhttp://www.product.com/ {Controller}/{Action}/{にマップする必要がありますid} を通常の MVC にマップします。
これは私のルートとして私が今持っているものです:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new {id = RouteParameter.Optional}
).Constraints["Namespaces"] = new string[] { "Product.Api.Controllers" };
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ,
namespaces: new[] { "Product.Web.Controllers" }
);
残念ながら、API URL (この場合、例はhttp://www.product.com/api/Tables/でした) にアクセスすると (または ID を定義した場合でも)、HTTP 404 エラーが発生します。
http://www.product.com/Home/Indexは問題なく動作します。
奇妙なことに、ルーティング デバッガー ツールを試してみましたが、まだ問題がありました。実際、デバッガーの出力を見ることはできませんでした。http://www.product.com/Home/Indexとhttp://www.product.com/はどちらもビューを表示しますが、すべての api/* はまだ 404 を示しています。デバッガーからの出力はまだ見ていません。
とにかく、望ましい効果を得る方法はありますか?
編集: global.asax.cs ファイルがProduct.Web
名前空間にあることに気付きました。名前空間にあるように変更しましたが、Product
まだうまくいきません。