发送json到web api时发生错误:Access-Control-Allow-Origin不允许使用Origin null

时间:2012-08-21 06:22:16

标签: json cross-domain azure-storage

我试图将json数据发布到服务器。我正在使用visual studio 2012 RC和windowsazure来托管Web应用程序。在发布时我收到以下错误:

  1. 选项http:// * .azurewebsites.net / api / Child 405(方法不允许)jquery-1.7.1.js:8102

  2. XMLHttpRequest无法加载http:// * .azurewebsites.net / api / Child。 Access-Control-Allow-Origin不允许使用null。

  3. 我的客户端代码是:

           function PostChild() {                  
            var Chld = {};            
            Chld.Child_FirstName = $("#Child_FirstName").val();
            Chld.Child_LastName = $("#Child_LastName").val();
            Chld.Child_Age = $("#Child_Age").val();          
            var createurl = "http://*.azurewebsites.net/api/Child";                      
            $.ajax({
                type: "POST",
                url: createurl,
                contentType: "application/json; charset=utf-8",
                data: JSON.stringify(Chld),       
                statusCode: {
                    200: function () {
                        $("#txtmsg").val("done");
                        alert('Success');
                    }
                },
                error:
                    function (res) {
                        alert('Error');
                        $("#txtmsg").val("error" + " "
                        + res.status + " " + res.statusText);
                    }
            });
        }
    

    我的服务器端代码是:

        public HttpResponseMessage PostChild(Child child)
        {
    
    
            if (ModelState.IsValid)
            {
                db.Children.Add(child);
                db.SaveChanges();
    
                HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, child);
                response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = child.ChildID }));
                return response;
            }
            else
            {
                return Request.CreateResponse(HttpStatusCode.BadRequest);
            }
        }
    

    请帮帮我

    谢谢,

1 个答案:

答案 0 :(得分:1)

错误是由CORS(跨源资源共享)引起的。默认情况下,网页无法调用除页面来源之外的域上的服务(API)。这是一种避免跨站点伪造攻击的安全措施。

要解决此问题,请遵循以下教程:

http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/20/implementing-cors-support-in-asp-net-web-apis.aspx