CamDiGi
0 محصولات نمایش سبد خرید

سبد خرید شما خالی است.

خطای Access Control Allow Origin

خطای Access Control Allow Origin

در اینجا ما میخواهیم اطلاعت از سایتی که با asp نوشته شده است را در سایت WordPress نمایش دهیم. اگر شما بخواهید از یک سایت، محتوای سایت دیگری را بصورت API یا وب سرویس یا روش هایی همچون post و get و … فراخوانی کنید، با توجه به افزایش امنیت در مرورگرها امکان چنین کاری به شما داده نمی شود و با پیغام Access Control Allow Origin روبرو می شوید.

برای مثال ما در سایت اول که با وردپرس راه اندازی شده است می خواهیم یک تابعی از سایت دیگر فراخوانی کنیم و با استفاده از آن یک دیتا (مثلاً عدد) را نمایش دهیم.
قطعه کد برای فراخوانی در سایت وردپرس به شکل زیر است:

<script type="text/javascript">
jQuery(document).ready(
function () {
jQuery.getJSON("http://www.binitiz.ir/Home/GetCounter/4", function (json) {
jQuery("#CountOfUsers").text(json);

});
});
</script>

سایت دیگر در سرور متفاوتی است و زبان برنامه نویسی 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 JsonResult GetCounter(int id)
{
long cnt = 0;
//Your Code Here ...
return Json(cnt, JsonRequestBehavior.AllowGet);
}

 

 

اگر از 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);
}
}

سپس به دو روش می توانید از تگ تعریف شده بالا استفاده کنید.

روش اول برای کنترلر :

[AllowCrossSiteJson] public class ValuesController : ApiController {
...
}

روش دوم برای هر تابع :

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

0
دیدگاه‌های نوشته

*
*