我有一个简单的操作方法,它返回一些 json。它在 ajax.example.com 上运行。我需要从另一个网站 someothersite.com 访问该网站。
如果我尝试调用它,我会得到预期的...:
Origin http://someothersite.com is not allowed by Access-Control-Allow-Origin.
我知道有两种方法可以解决这个问题:JSONP https://stackoverflow.com/questions/5968682/jquery-ajax-json-cross-domain-request-and-asp-net-mvc并创建一个自定义 HttpHandler http://tpeczek.blogspot.com/2010/09/httphandler-with-cross-origin-resource.html到
设置标题。
难道就没有更简单的办法吗?
一个简单的操作是否不可能定义允许的来源列表 - 或者简单地允许每个人?也许是一个动作过滤器?
最佳是...:
return json(mydata, JsonBehaviour.IDontCareWhoAccessesMe);
对于普通 ASP.NET MVC 控制器
创建一个新属性
public class AllowCrossSiteJsonAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
base.OnActionExecuting(filterContext);
}
}
标记你的行动:
[AllowCrossSiteJson]
public ActionResult YourMethod()
{
return Json("Works better?");
}
对于 ASP.NET Web API
using System;
using System.Web.Http.Filters;
public class AllowCrossSiteJsonAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
if (actionExecutedContext.Response != null)
actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");
base.OnActionExecuted(actionExecutedContext);
}
}
标记整个 API 控制器:
[AllowCrossSiteJson]
public class ValuesController : ApiController
{
或单独的 API 调用:
[AllowCrossSiteJson]
public IEnumerable<PartViewModel> Get()
{
...
}
对于 Internet Explorer
IE
使用nuget下载corsproxy
并按照随附的说明进行操作。
博客文章 http://blog.gauffin.org/2014/04/how-to-use-cors-requests-in-internet-explorer-9-and-below/ | 源代码 https://github.com/jgauffin/corsproxy
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)