我有一个简单的actionmethod,返回一些json.它在ajax.example.com上运行.我需要从另一个站点someothersite.com访问它.
如果我试着打电话给我,我会得到预期的......:
Origin http://someothersite.com is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)
我知道有两种解决方法:JSONP和创建自定义HttpHandler来设置标头.
有没有更简单的方法?
简单的动作是否不可能定义允许的起源列表 - 或者简单地允许每个人?也许一个动作过滤器?
最佳将是......:
return json(mydata, JsonBehaviour.IDontCareWhoAccessesMe);
Run Code Online (Sandbox Code Playgroud) 问题:
出于某种原因,启用 CORS 时,Access-Control-Allow-Origin响应中不包含标头。
错误:
从源“https://some.site.com”访问“https://.../api/endpoints/some-path”的 XMLHttpRequest 已被 CORS 政策阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。
配置 (.NET MVC 5)
web.config标头:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Credentials" value="true"/>
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, OPTIONS" />
</customHeaders>
</httpProtocol>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
Web API 配置:
config.EnableCors();
Run Code Online (Sandbox Code Playgroud)
API 端点:
[RoutePrefix("api/endpoints")]
[EnableCors(origins: "https://some.site.com", headers: "*", methods: "*")]
public class MyApiController : ApiController
{
[HttpPost]
[Route("some-path")]
[EnableCors(origins: "https://some.site.com", headers: "*", methods: "*")]
public ResponseModel GetSomeResponse(DataModel model) { ... }
}
Run Code Online (Sandbox Code Playgroud)
global.asax.cs
protected void Application_BeginRequest(object sender, EventArgs e) …Run Code Online (Sandbox Code Playgroud) 也许这个问题看起来重复,但我有自己的场景,ASP.NET MVC应用程序,当我单击签出时,它会抛出以下错误。
跨源请求被阻止:同源策略不允许读取 http://servicelink?order=%5Bobject%20Object%5D处的远程资源。(原因:CORS 标头“Access-Control-Allow-Origin”丢失)。
cors ×2
json ×2
api ×1
asp.net ×1
asp.net-ajax ×1
asp.net-mvc ×1
c# ×1
cross-domain ×1
jquery ×1