在同一端口上运行单独的 ASP.NET 个项目

Running separate ASP.NET projects on the same port

我有一个 ASP.NET MVC 项目,其中包含大部分 Web 应用程序以及客户端代码使用的 Web API。 API 组件开始蔓延,我想将 API 和 MVC 应用程序分成两个项目。 (MyAppMVC 和 MyAppAPI)。但是,当 API 不属于一个项目时,我不确定如何让 MVC 应用程序与它们很好地配合使用。

现在我有一个 API 控制器 MyAPIController,它响应 POST 和从客户端 JavaScript 发送到 /api/MyAPI 的 GET 请求。当 JS 和 API 都在同一个项目下时,我从 Visual Studio 运行解决方案并毫无问题地点击 API。

但是,当他们在不同的项目中运行时,就不再合作了。为避免违反跨域安全,JS 必须在同一域/端口内命中 API。但是 Visual Studio 在不同的端口上运行我的 API 和 MVC 应用程序,并试图从 MVC 文件中的 Javascript 文件中访问 API 会导致同源错误。

有没有办法让这两个不同但互补的项目运行在同一个域/端口上?对于组织和模块化,我真的希望能够将我的 Web 应用程序分成多个项目,而不是将它们集中到一个庞大的项目中。

我可以这样建议

  1. 在 IIS 中为 api 创建应用程序
  2. 在 IIS 中为 MVC 应用程序创建应用程序
  3. 在API中启用跨域请求 <system.webServer> <httpProtocol> <customHeaders> <add name="access-control-allow-headers" value="content-type" /> <add name="Access-Control-Allow-Origin" value="*" /> </customHeaders> </httpProtocol> <system.webServer>

    1. 在两个项目中都使用自定义 Web 服务器进行调试 VS 2012 是:右击 web 项目 -> Web -> Select "Use custom web server" 并提供项目的 url,它会像 localhost/api, localhost/mvc_client

从那一刻起,您的项目将

  1. 调试模式下的相同地址,或者当您在没有调试的情况下浏览到项目时。
  2. Api 项目将允许跨域请求。
  3. 客户端将能够向 API 发送请求,因为它允许跨域请求。
  4. 并且您将能够调试项目。

如果您愿意,请确认您可以在 运行 调试之前浏览到项目。您可能会遇到一些问题,例如 "access to the path denied" 等等。

所以我的修复,不使用 CORS 最终只是放弃使用 IISExpress 并在本地 IIS 下创建两个单独的应用程序,每个应用程序都有自己的路径,但都位于 default web site (localhost) 下端口 80。这样我就可以到达 http://localhost/MyAppUI,然后从 MyAppUI 调用 http://localhost/MyAppAPI/api,而无需处理任何跨域问题。

转到 Visual Studio 中的项目属性,然后转到 Web,在服务器下将项目 url 更改为不同的端口号并创建虚拟目录。