在同一域下托管WebApi和C#站点

时间:2017-01-30 19:03:47

标签: c# asp.net-mvc asp.net-web-api iis-express

我有一个用C#(http://my.site/)制作的网站,现在我有一个Web API项目,我想要合并到该域并监听http://my.site/api。它们是VS2013中的两个独立项目。

我尝试将Web API上传到服务器中的/api/子文件夹,并将MVC路由映射到它( WebApiConfig.cs 中的WebApi路由仍为routeTemplate: "api/{controller}/{id}"),期望默认(主页)MVC控制器以/api/进行响应。 MVC路由(在WebAPI的MVC路由中):

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

但我得到了#34;服务器错误404"在访问http://my.site/api/ / http://my.site/api/home等时,我不了解此错误的性质(很可能是根文件夹中C#网站的设置),但有人会认为IIS会提供默认应用在/api/文件夹中。

所以我想知道是否将WebApiConfig.Register(GlobalConfiguration.Configuration);添加到Global.asax Application_Start())并将 WebApiConfig.cs 添加到 App_Start C#项目的文件夹(并使用相应的命名空间)将解决此问题。这似乎太简单了,所以我怀疑它会起作用,所以我需要有人指出我正确的方向,否则我会犯下回到 asmx 的罪。

如果没有,我如何在同一个域上拥有C#网站和WebAPI?

1 个答案:

答案 0 :(得分:4)

您希望在服务器上的同一bin文件夹中运行两个单独的dll(每个dll都有自己的路由规则)。这肯定会导致您网站上的路由出现一些冲突。正确的方法是在单独的服务器上托管api项目并使用子域,例如http://api.my.site/。这样您就可以确保您的C#站点(http://my.site/)可以访问api(http://api.my.site/)。你的dll,包括路由规则,将保持独立。