SORU
9 HAZİRAN 2011, PERŞEMBE


Ayar Access-Control-Allow-Origin ASP.NET MVC - olabildiğince basit yöntemi

Bazı json döndüren basit bir actionmethod var. Ajax.example.com çalışır. Bu başka bir siteden someothersite.com erişim gerekiyor.

Eğer çok çalışırsanız, beklenen...:

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

Bunu çözmek için iki yol biliyorum: 14 ** custom HttpHandler bir oluşturma Başlığı ayarlayın.

Daha basit bir yolu var mı?

Basit bir eylem ya da izin kökenleri - veya basit herkes tanır listesini tanımlamak mümkün değil mi? Eylem bir filtre olabilir mi?

Optimal...:

return json(mydata, JsonBehaviour.IDontCareWhoAccessesMe);

CEVAP
9 HAZİRAN 2011, PERŞEMBE


Düz ASP.NET MVC Denetleyicileri için

Yeni bir öznitelik oluşturmak

public class AllowCrossSiteJsonAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
        base.OnActionExecuting(filterContext);
    }
}

Eylem etiketi:

[AllowCrossSiteJson]
public ActionResult YourMethod()
{
    return Json("Works better?");
}

ASP.NET Web API için

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);
    }
}

Bütün API denetleyicisi etiket:

[AllowCrossSiteJson]
public class ValuesController : ApiController
{

Ya da bireysel API çağırır:

[AllowCrossSiteJson]
public IEnumerable<PartViewModel> Get()
{
    ...
}

Internet Explorer <= 9

YANİ <= 9 İSTASYONDAN desteklemiyor. Bir proxy sunucusu üzerinden otomatik olarak rota bu istekleri bir javascript buldum. % 100 şeffaf (yani Sadece Kay Vekili ve çalışması için komut dosyası vardır.

İndir nuget `corsproxy' ve sadece talimatları uygulayın. kullanmadan

Blog post | Source code

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AceHoodVEVO

    AceHoodVEVO

    12 Mayıs 2009
  • GWTLecturer

    GWTLecturer

    18 EKİM 2012
  • Troy Hunt

    Troy Hunt

    29 EYLÜL 2011