5

使用的技术:

  • 微风JS
  • 数据
  • 网络 API 2
  • MVC 5
  • IDE:Visual Studio 2013

我一直在为在一个解决方案中拥有一个 Web API 项目和一个单独的网站项目而苦苦挣扎。

  • 我的 Web API 2 项目打开为:localhost:2020/ExampleProject.API
  • 我的 MVC 5 网站项目打开为:localhost:5050/ExampleProject.WebSite

现在默认情况下 web api 不允许跨源策略。所以我尝试在我的 Web API 2 中启用 CORS,虽然我能够让它工作,但它只适用于最新的浏览器;我需要 IE7 到 IE9 的向后兼容性。

所以我玩了JSONP。我不喜欢对此缺乏支持。我能够让它在我的 Web API 2 项目中工作,但如果我想使用 BreezeController (如果使用微风js web api 库),它就不起作用。如果我想创建一个 ODataController,它也不起作用。

所以我正在远离跨源共享的想法;虽然希望将来无论我使用 BreezeJS WebAPI 帮助程序还是 ODataControllers 都会对 jsonp 有足够的支持。

目前,我不知道如何将我的 WebAPI 项目和我的 MVC 5 网站放在我可以拥有的同一个域下:

  • 本地主机/ExampleProject.API
  • 本地主机/ExampleProject.WebSite

我必须在我的主机文件中进行一些配置吗?如果我想从 VS2013 运行我的项目,它是否能够在同一个域下运行两个项目.. 还是我必须继续手动更改浏览器中的 URL?

4

1 回答 1

6

嗯,答案真的很简单。

我知道这是一个老问题,只是我忘记了如何去做,因为我已经很久没有这样做了。在 google 和 stackoverflow 上搜索答案很困难,因为讨论讨论的是设置跨域策略而不是设置同源策略。

我花了大部分时间把所有东西都放在 IIS 上。

  1. 创建了一个网站并让它指向我的网站 csproj 和 bin 文件夹所在的物理路径。我给它一个主机名“dev.example.com”并将我的主机文件更改为 127.0.0.1 以引用 dev.example.com

  2. 为网站创建了一个 Web 应用程序,并将其设置为 web api 2 项目。在那之后,一切都神奇地起作用了。

愚蠢的部分是,我可以在 Visual Studio 中轻松做到这一点。我记得在 VS2010 中,这会导致很多问题,但是在 2013 年,我猜错误已经修复并且现在可以工作了。

我将我的网站项目设置为

localhost:2020/ExampleProject.WebSite(不正确)

代替

本地主机:2020(正确)

并创建了一个虚拟目录。我通过右键单击项目,转到“Web”选项卡下的属性来执行此操作。

所以基本上,经验法则是让我的网站成为我的主根域,并将整个域复制到我想在其下添加的任何 Web 应用程序。

所以:网站将是:

本地主机:2020

Web应用程序:

本地主机:2020/ExampleProject.API

于 2014-01-27T00:33:38.493 回答