【问题标题】:Running separate ASP.NET projects on the same port在同一端口上运行单独的 ASP.NET 项目
【发布时间】:2015-01-05 16:53:35
【问题描述】:

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

现在我有一个 API 控制器 MyAPIController 可以回答从客户端 JavaScript 发送到 /api/MyAPI 的 POST 和 GET 请求。当 JS 和 API 都在同一个项目下时,我从 Visual Studio 运行解决方案并点击 API 没有任何问题。

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

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

【问题讨论】:

  • 他们在同一个解决方案中吗?
  • 您可以在同一站点上使用 CORS 或不同的 IIS 应用程序。
  • 您可以使用 IIS 代替 IISExpress / Cassini。将它们托管在同一个网站上。

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


【解决方案1】:

我可以这样建议

  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 -> 选择“使用自定义 web 服务器”并提供项目的 url,它将类似于 localhost/api, localhost/mvc_client

从那一刻起,您的项目将拥有

  1. 在调试模式下或当您浏览项目而不进行调试时地址相同。
  2. Api 项目将允许跨域请求。
  3. 客户端将能够向 API 发送请求,因为它允许跨域请求。
  4. 您将能够调试项目。

如果您愿意,请确认您可以在运行调试之前浏览项目。您可能会遇到“访问路径被拒绝”等问题。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我在 VS 2017 中没有看到这些选项。它们在 .Net Core 中可用吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      • 2016-12-03
      • 2020-09-24
      • 2021-12-22
      相关资源
      最近更新 更多