我有一个项目(名为Product.Api
),其中包含一些用于我们的 WebAPI 站点的控制器。控制器位于命名空间中Product.Api.Controllers
。该项目还有一些其他的辅助工具。这被编译成一个库。
我还有另一个名为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
名称空间中,但仍然不行。