在同一端口上运行单独的 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 应用程序分成多个项目,而不是将它们集中到一个庞大的项目中。
我可以这样建议
- 在 IIS 中为 api 创建应用程序
- 在 IIS 中为 MVC 应用程序创建应用程序
在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>
- 在两个项目中都使用自定义 Web 服务器进行调试
VS 2012 是:右击 web 项目 -> Web -> Select "Use custom web server" 并提供项目的 url,它会像 localhost/api, localhost/mvc_client
从那一刻起,您的项目将
- 调试模式下的相同地址,或者当您在没有调试的情况下浏览到项目时。
- Api 项目将允许跨域请求。
- 客户端将能够向 API 发送请求,因为它允许跨域请求。
- 并且您将能够调试项目。
如果您愿意,请确认您可以在 运行 调试之前浏览到项目。您可能会遇到一些问题,例如 "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 更改为不同的端口号并创建虚拟目录。
我有一个 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 应用程序分成多个项目,而不是将它们集中到一个庞大的项目中。
我可以这样建议
- 在 IIS 中为 api 创建应用程序
- 在 IIS 中为 MVC 应用程序创建应用程序
在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>
- 在两个项目中都使用自定义 Web 服务器进行调试 VS 2012 是:右击 web 项目 -> Web -> Select "Use custom web server" 并提供项目的 url,它会像 localhost/api, localhost/mvc_client
从那一刻起,您的项目将
- 调试模式下的相同地址,或者当您在没有调试的情况下浏览到项目时。
- Api 项目将允许跨域请求。
- 客户端将能够向 API 发送请求,因为它允许跨域请求。
- 并且您将能够调试项目。
如果您愿意,请确认您可以在 运行 调试之前浏览到项目。您可能会遇到一些问题,例如 "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 更改为不同的端口号并创建虚拟目录。