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