猿问

在ASP.NETMVC中设置访问-控制-允许-原产地-最简单的可能方法

在ASP.NETMVC中设置访问-控制-允许-原产地-最简单的可能方法

我有一个简单的actionMethod,它返回一些json。它运行在ajax.example.com上。我需要从另一个网站访问这个网站。

如果我试着叫它,我就会得到预期的.:

Origin http://someothersite.com is not allowed by Access-Control-Allow-Origin.

我知道有两种方法可以解决这个问题:JSONP并创建一个自定义HttpHandler若要设置标题,请执行以下操作。

有没有更简单的方法?

一个简单的操作不可能定义一个允许的起源列表,或者简单地允许每个人?也许是动作过滤器?

最佳方案是:

return json(mydata, JsonBehaviour.IDontCareWhoAccessesMe);


一只名叫tom的猫
浏览 424回答 3
3回答

富国沪深

对于普通ASP.NETMVC控制器创建一个新属性public&nbsp;class&nbsp;AllowCrossSiteJsonAttribute&nbsp;:&nbsp;ActionFilterAttribute{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;void&nbsp;OnActionExecuting(ActionExecutingContext&nbsp;filterContext) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin",&nbsp;"*"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base.OnActionExecuting(filterContext); &nbsp;&nbsp;&nbsp;&nbsp;}}标记你的行动:[AllowCrossSiteJson]public&nbsp;ActionResult&nbsp;YourMethod(){ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Json("Works&nbsp;better?");}对于ASP.NETWebAPIusing&nbsp;System;using&nbsp;System.Web.Http.Filters;public&nbsp;class&nbsp;AllowCrossSiteJsonAttribute&nbsp;:&nbsp;ActionFilterAttribute{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;override&nbsp;void&nbsp;OnActionExecuted(HttpActionExecutedContext&nbsp;actionExecutedContext) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(actionExecutedContext.Response&nbsp;!=&nbsp;null) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin",&nbsp;"*"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base.OnActionExecuted(actionExecutedContext); &nbsp;&nbsp;&nbsp;&nbsp;}}标记整个API控制器:[AllowCrossSiteJson]public&nbsp;class&nbsp;ValuesController&nbsp;:&nbsp;ApiController{或单个API调用:[AllowCrossSiteJson]public&nbsp;IEnumerable<PartViewModel>&nbsp;Get(){ &nbsp;&nbsp;&nbsp;&nbsp;...}对于InternetExplorer<=v9IE<=9不支持CORS。我已经编写了一个javascript,它将通过代理自动路由这些请求。它是100%透明的(您只需包括我的代理和脚本)。使用Nuget下载corsproxy并按照包括的指示。
随时随地看视频慕课网APP
我要回答