PDA

View Full Version : سوال: مشکل در api



komeil64
سه شنبه 19 اردیبهشت 1396, 12:43 عصر
سلام
من یک api نوشتم که مقادیری بهش پست میشه ولی وقتی پیج مربوط رو باز می کنم این ارور ها در کنسول مرورگر داده میشه

jquery.min.js:4 OPTIONS http://domain.com/api/Check 405 (Method Not Allowed)send @ jquery.min.js:4ajax @ jquery.min.js:4(anonymous function) @ VM2090:1o @ jquery.min.js:2fireWith @ jquery.min.js:2ready @ jquery.min.js:2B @ jquery.min.js:2
jquery.min.js:4 XMLHttpRequest cannot load http://domain.com/api/Check. Response for preflight has invalid HTTP status code 405

ممنون میشم راهنمایی کنید چی کارش کنم

Mag-Mag
سه شنبه 19 اردیبهشت 1396, 15:14 عصر
سلام
این کد رو به فایل global اضافه کنید
فکر میکنم مشکلتون حل بشه


protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
}
}

komeil64
چهارشنبه 20 اردیبهشت 1396, 09:29 صبح
حالا این ارور رو میده

jquery.min.js:4 XMLHttpRequest cannot load http:/site.com/api/Check. Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed. Origin 'http://site2.com' is therefore not allowed access.

Mag-Mag
چهارشنبه 20 اردیبهشت 1396, 10:09 صبح
خوب بجای اون این روی توی وب کانفیگت بزاری باید مشکل حل بشه


<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="*" />
</customHeaders>
</httpProtocol>


اینجا هم یک سمپل از کاری که میخوای انجام بدی هست (لینک) (https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api)

komeil64
چهارشنبه 20 اردیبهشت 1396, 11:14 صبح
متاسفانه بازم مشکل هست جهت اطلاع این route آدرس api هستش

RouteTable.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = System.Web.Http.RouteParameter.Optional } );

و با متد زیر دریافت میشه


[HttpPost]
public String PostAction([FromBody] String ReciveLog)

و بوسیله کد زیر ارسال میشه:


$.ajax({ type: 'POST',
url: 'http://Site.com/api/Check',
data: JSON.stringify(window.btoa(jsondata)),
success: function(data)
{ var text = window.atob(data);
$(text).appendTo('body'); }
, contentType: 'application/json',
dataType: 'json'
});

komeil64
چهارشنبه 20 اردیبهشت 1396, 12:32 عصر
با دو تا کار لینک زیر حل شد تشکر
http://stackoverflow.com/questions/37383975/xmlhttprequest-can-not-load-response-for-preflight-has-invalid-http-status-code

Mag-Mag
چهارشنبه 20 اردیبهشت 1396, 12:37 عصر
بسیار عالی