我正在尝试从WepApi2控制器获取json响应
[EnableCors(origin = "*", methods = "*", headers = "*")]
public class DataController {
public IEnumerable<int> GetData(RequestItems items) {
...
}
}
使用此项尝试获取数据。。。
$.ajax({
type: "POST",
method: "POST",
contentType: "application/json",
url: "https://api.mysite.com/api/Data/GetData",
data: JSON.stringify({ /* some data here */ }),
headers: {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "*",
"Access-Control-Allow-Headers": "*"
},
xhrFields: {
withCredentials: true
},
success: function(xhr) {
console.log(xhr);
},
error: function(e) {
console.log(e);
}
});
我得到了这个...
阻止跨源请求:同一源策略不允许读取位于的远程资源https://api.mysite.com/api/Data/GetData.(原因:CORS标头“Access Control Allow Origin”与“*”不匹配)
我已经在网络上搜索了几乎所有我能找到的关于CORS和jQuery的信息,但我不知道该怎么办。请帮助!
您可以按照以下步骤操作-
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
</modules>
<httpProtocol>
<!-- THESE HEADERS ARE IMPORTANT TO WORK WITH CORS -->
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="POST, PUT, DELETE, GET, OPTIONS" />
<add name="Access-Control-Allow-Headers" value="content-Type, accept, origin, X-Requested-With, Authorization, name" />
</customHeaders>
</httpProtocol>
<handlers>
<remove name="WebDAV" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
我将CORS与WebAPI一起使用,没有任何问题。也许我会描述一下我的工作。如果不相关,我会删除答案。但这对我来说很有用。
编辑:还要注意,对于CORS,标题必须作为响应。
我当然在使用OWIN
。我的Startup.cs
如下所示:
public static void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
config.EnableCors(new EnableCorsAttribute("*", "*", "GET, POST, OPTIONS, PUT, DELETE"));
WebApiConfig.Register(config);
app.UseWebApi(config);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
}
注意,我必须在我的WebApiConfig上显式地启用cors。然后当然通过应用程序继续。UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll)
然后只需在我的ApiController类上启用cors,就像您所做的那样:
[EnableCors("*", "*", "GET,POST")]
public class FauxDBController : ApiController
{
[HttpPost]
[AllowAnonymous]
public mJSONSQLFAUXResponse XYZ(mJSONSQLFAUX data)
{
}
}
为了展示我使用的NuGet包,这里是我的packages.config
:
<packages>
<package id="Microsoft.AspNet.Cors" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Cors" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net452" />
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" />
<package id="Microsoft.Net.Compilers" version="1.0.0" targetFramework="net452" developmentDependency="true" />
<package id="Microsoft.Owin" version="3.0.1" targetFramework="net452" />
<package id="Microsoft.Owin.Cors" version="3.0.1" targetFramework="net452" />
<package id="Microsoft.Owin.Host.SystemWeb" version="3.0.1" targetFramework="net452" />
<package id="Newtonsoft.Json" version="6.0.4" targetFramework="net452" />
<package id="Owin" version="1.0" targetFramework="net452" />
</packages>
最后,我不使用jQuery,而是使用角度。带有ajax例程的js文件如下所示:
$http.post('http://localhost:59113/api/FauxDB/XYZ', { }).success(function (data, status, headers, config) {
// something..
}).error(function (data, status, headers, config) {
// something..
});
希望有帮助。
我有一个奇怪的问题,每天我的AJAX请求一个网站不再工作。 我现在正在努力使它工作,但找不到问题。 这是我的JavaScript:基本上它非常简单,它检索ip adres并将其发送到存储它的站点。 在服务器上,我现在添加了这一项,以避免使用通配符 当我只使用 头('access-control-allow-origin:');我得到错误:Cross-Origin-request blocked:C
我试图从一个应用程序(spring-boot应用程序)调用另一个应用程序(angularjs)上的RESTendpoint。应用程序正在下列主机和端口上运行。 REST应用程序,使用Spring Boot, HTML应用程序,使用angularjs, 处理程序所做的只是根据用户是否登录、身份验证失败或注销,写出类似的JSON响应。如下所示。 对我错过了什么或者做错了什么有什么想法吗?
我的服务器运行在localhost:8080(spring boot app)上,前端运行在localhost:3000(angular app)上。问题是我想从前端向后端服务器发出请求。我熟悉cors,但对我来说不起作用。我已将此添加到我的服务器: ,但我仍然得到 XMLHttpRequest无法加载http://localhost:8080/cars.请求被重定向到http://localho
在过去的三天里,我一直在与错误“跨源请求被阻止:相同的源策略不允许读取http://localhost:8080/demomongo/templateapp/login上的远程资源。”(原因:缺少CORS头'Access-Control-Allow-Origin')。
配置基于:https://spring.io/guides/gs/rest-service-cors/ 请给我指出解决这个问题的正确方向。
然后,我创建了一个简单的html页面,作为S3上的静态网站托管,使用Route53将一个域指向该页面,并开始使用jQuery$.ajax测试API进行调用。 所有这些看起来都很简单、简单,并且与文档中所解释的完全一样,只是GET工作并按预期将文本输出到控制台。POST版本会导致以下错误: 选项原始响应标头: 返回200 OK