C# 消除ASP.NET网站和ASP.NET WebAPI的跨域/子域选项请求

C# 消除ASP.NET网站和ASP.NET WebAPI的跨域/子域选项请求,c#,asp.net-mvc-4,asp.net-web-api,cors,amplifyjs,C#,Asp.net Mvc 4,Asp.net Web Api,Cors,Amplifyjs,我有一个ASP.Net MVC 4网站和另一个ASP.Net Web API项目。目前这两个网站都托管在不同的域上。我使用amplify.js在前端使用API。由于这两个网站都托管在不同的域上,因此当我从UII调用我的API时,它始终是一个跨域请求。我正在为此目的使用CORS。这会导致额外的问题每个HTTP API调用的选项请求都会增加开销。我也尝试在子域上托管这两个网站,但仍然存在选项请求,我想摆脱这些额外的请求 有什么方法可以消除选项请求 有什么方法可以消除选项请求 你可以用它来代替CORS

我有一个ASP.Net MVC 4网站和另一个ASP.Net Web API项目。目前这两个网站都托管在不同的域上。我使用amplify.js在前端使用API。由于这两个网站都托管在不同的域上,因此当我从UII调用我的API时,它始终是一个跨域请求。我正在为此目的使用CORS。这会导致额外的问题每个HTTP API调用的选项请求都会增加开销。我也尝试在子域上托管这两个网站,但仍然存在选项请求,我想摆脱这些额外的请求

有什么方法可以消除选项请求

有什么方法可以消除选项请求

你可以用它来代替CORS。不幸的是,这对于您的场景来说可能还不够,因为JSONP仅适用于GET请求jQuery的$。ajax方法有这个限制

或者,如果您将2托管在同一个域上,并且没有违反,则可以使用普通的AJAX请求

有什么方法可以消除选项请求

你可以用它来代替CORS。不幸的是,这对于您的场景来说可能还不够,因为JSONP仅适用于GET请求jQuery的$。ajax方法有这个限制


或者,如果您在同一个域上托管2,并且没有违反,则可以使用普通的AJAX请求。

为了防止跨域请求,源域和目标域必须完全相同:在主机、域和端口中。但是,您仍然有一些选项可以防止CORS:

将网站和API放在同一个域中-有点明显; 创建某种服务器端代理脚本PHP、Node.js或您喜欢的任何东西,它通过curl或类似于API的任何东西来路由请求。这将阻止选项头,但需要另一个HTTP请求AJAX网站httpd API httpd。 类似的解决方案是使用Apache作为反向代理。与脚本解决方案一样,这也会导致两个HTTP请求,但我假设反向代理会减少开销。 您也可以使用,但API需要支持它,因此您可能需要重新实现websiteAPI通信,如果您关心它,您的API将不再是。 我会选择一种或三种方式,因为脚本解决方案感觉太笨拙了;我还建议检查是否真的有必要在不同的域上运行API和网站。选项标头通常不会造成太多开销,因此您可以考虑首先优化代码的其他部分。
也许你可以把网站和API放在一个域中,而只把API的数据库放在另一台服务器上?只是一个想法…

为了防止跨域请求,源域和目标域必须完全相同:在主机、域和端口中。但是,您仍然有一些选项可以防止CORS:

将网站和API放在同一个域中-有点明显; 创建某种服务器端代理脚本PHP、Node.js或您喜欢的任何东西,它通过curl或类似于API的任何东西来路由请求。这将阻止选项头,但需要另一个HTTP请求AJAX网站httpd API httpd。 类似的解决方案是使用Apache作为反向代理。与脚本解决方案一样,这也会导致两个HTTP请求,但我假设反向代理会减少开销。 您也可以使用,但API需要支持它,因此您可能需要重新实现websiteAPI通信,如果您关心它,您的API将不再是。 我会选择一种或三种方式,因为脚本解决方案感觉太笨拙了;我还建议检查是否真的有必要在不同的域上运行API和网站。选项标头通常不会造成太多开销,因此您可以考虑首先优化代码的其他部分。
也许你可以把网站和API放在一个域中,而只把API的数据库放在另一台服务器上?只是一个想法…

你能提供一些参考资料吗?我可以从哪里开始做这件事?哪一个?JSONP?正如我在回答中所解释的,它有一些限制,比如可以使用HTTP动词。这是你想做的事吗?如果是,那么您可以看看下面的帖子:这是我使用post、PUT和DELETE以及GET requestsWell的一个问题,在这种情况下,您必须在同一个域上托管Web API,并使用标准AJAX请求。没有别的办法了。不,那是不可能的。您违反了同一原产地政策。请阅读我链接到的文章:如果你想这样做,你应该遵守这项政策,例如,你的应用程序必须托管在website.domainname.com和website.domainname.com/api上。你能提供一些我可以从哪里开始这样做的参考资料吗?哪一个?JSONP?正如我在回答中所解释的,它有一些限制,比如可以使用HTTP动词。这是你想要的吗
怎么办?如果是,那么您可以看看下面的帖子:这是我使用post、PUT和DELETE以及GET requestsWell的一个问题,在这种情况下,您必须在同一个域上托管Web API,并使用标准AJAX请求。没有别的办法了。不,那是不可能的。您违反了同一原产地政策。请阅读我链接到的文章:如果你想让它起作用,你应该遵守这一政策,例如,你的应用程序必须托管在website.domainname.com和website.domainname.com/api上。