【问题标题】:Web API 2 project and MVC 5 Website project in same domain同一域中的 Web API 2 项目和 MVC 5 网站项目
【发布时间】:2014-02-17 16:12:55
【问题描述】:

使用的技术:

  • BreezeJS
  • OData
  • Web 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 网站放在我可以拥有的同一个域下:

  • localhost/ExampleProject.API
  • localhost/ExampleProject.WebSite

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

【问题讨论】:

    标签: asp.net-mvc-5 same-origin-policy asp.net-web-api2


    【解决方案1】:

    嗯,答案真的很简单。

    我知道这是一个老问题,只是我忘记了如何去做,因为我已经很久没有这样做了。在 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 年,我想 bug 已经修复,现在可以使用了。

    我的网站项目设置为

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

    而不是

    localhost:2020(正确)

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

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

    所以:网站将是:

    本地主机:2020

    网络应用:

    localhost:2020/ExampleProject.API

    【讨论】:

      猜你喜欢
      • 2014-04-30
      • 2016-07-06
      • 2020-06-03
      • 1970-01-01
      • 2013-09-06
      • 2015-06-02
      • 2015-05-08
      • 1970-01-01
      相关资源
      最近更新 更多