【问题标题】:Host WebApi and C# site under the same domain在同一个域下托管 WebApi 和 C# 站点
【发布时间】:2017-01-30 19:03:47
【问题描述】:

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

我尝试将 Web API 上传到服务器中的 /api/ 子文件夹,并将 MVC 路由映射到它(WebApiConfig.cs 中的 WebApi 路由仍然是 routeTemplate: "api/{controller}/{id}"),期待默认的 (Home) MVC控制器回复/api/。 MVC 路由(在 WebAPI 的 MVC 路由中):

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

但我在访问 http://my.site/api/ / http://my.site/api/home 等时收到“服务器错误 404”。我不明白这个错误的性质(很可能是 C# 网站根文件夹中的设置),但有人会认为 IIS将在 /api/ 文件夹中提供默认应用。

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

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

【问题讨论】:

  • 您是否希望 WebSiteA 能够监听并响应对 WebSiteB 的请求?
  • 我有一个 WebForms (C#) 网站,我想添加我创建的 WebAPI。
  • 为什么不把你的逻辑放在一个共享的 dll 中,并将 web api 库添加到你现有的 web 表单项目中,并根据需要在其中创建调用库的 web api 控制器实例。这样,如果您需要,您仍然可以将其重新部署为独立的解决方案,但您可以直接在同一个项目中托管您的控制器。我们目前这样做是因为我们希望在我们的一个遗留项目中使用 web api 控制器,完全没有问题。

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


【解决方案1】:

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

【讨论】:

  • 这似乎是一个合理的建议,但排除了my.site/api/ url 的可能性,这似乎是现在的标准。
  • 通常情况下,如果您在一个解决方案中拥有所有内容,则可以使用 my.site/api 之类的东西。当您有两个单独的解决方案时,通常使用像 api.my.site 这样的东西。而api.my.site 一点也不罕见。
  • 我确实意识到这是一个对 SEO 友好的解决方案,如果在同一个服务器文件夹上运行这两个项目是不可能/混乱的,我会使用你的建议(一个在 root 中,另一个在 /api)跨度>
  • 这是一个很好的建议。但我认为我的 API 路由不会与我的 Web 文件冲突,所以,问题是这样走还好吗?除了路线还会有其他冲突吗?
猜你喜欢
  • 1970-01-01
  • 2016-10-31
  • 2021-05-06
  • 1970-01-01
  • 2019-06-08
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
相关资源
最近更新 更多