用于没有 CORS 的 SPA 的 ASP.NET WebApi
Posted
技术标签:
【中文标题】用于没有 CORS 的 SPA 的 ASP.NET WebApi【英文标题】:ASP.NET WebApi for SPA without CORS 【发布时间】:2014-11-30 06:34:17 【问题描述】:我一直在使用 ASP.NET WebAPI 和 AngularJS 来测试一些小型内部公司 Web 应用程序。我真的很喜欢它的流动。我有一个默认的 HomeController
和一个 Index
方法,看起来类似于:
public HttpResponseMessage Get()
var response = new HttpResponseMessage();
response.Content = new StringContent(/* index.html */);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
return response;
我返回我的第一个index.html
页面,该页面位于我的应用程序中。我的问题是,要让它工作,我必须在 Startup.cs 的 OWIN 中间件中启用 CORS。我真的很想有一种方法让 WebAPI 返回我的索引页面而不必启用 CORS,并允许来自 angular 的所有后续 http 请求在不启用跨域的情况下工作。这是可行的,还是违背了 WebAPI 的整个概念?
感谢您的指导。
【问题讨论】:
来自浏览器的 GET 请求不需要 CORS...您确定您实际上是通过普通 GET 呈现页面而不是使用某些 AJAX 查询它而不是执行某种innerHTML
?
【参考方案1】:
只要您不进行跨域调用,就不需要启用 cors。 但是请记住,您必须在同一个域甚至同一个端口上。
为确保域相同,只需将 webapi 托管在 Web 应用程序中即可。
【讨论】:
添加 TGH 所说的内容,您需要类似 mywebsite.com/api 之类的东西来托管您的 API - 这会让您的 javascript 访问它。或者,您可以将所有内容更改为 JSONP - 如果您要走那条路线,您不妨选择 CORS【参考方案2】:您不能在托管网站的网络服务器上加入某种反向代理,即所有页面和 api 请求都具有相同的 URL 前缀吗?然后,客户端调用 API,就好像托管 Web 应用程序也在托管 API。托管 Web 应用程序配置了反向代理,然后所有 API 请求都被重定向到服务器级别的实际 API,而不是客户端级别。希望这是有道理的。
【讨论】:
以上是关于用于没有 CORS 的 SPA 的 ASP.NET WebApi的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET WebAPI2 CORS:预检时 GetOwinContext 中的空请求
CORS 不适用于从 Ajax 到 ASP.NET Core Web API 的调用
Firefox 上的 ASP.NET Core Web API CORS 错误,但在 Chrome 上没问题
ASP.NET Core CORS 配置不适用于 Firefox
使用具有多个来源的 PUT 和 DELETE 请求时如何解决 ASP.NET Web API CORS Preflight 问题?