1

我正在使用 asp.net web api 做一个跨域的 json 帖子。在我的服务/服务器端,我有以下响应POST请求的方法:

// POST api/<controller>
public HttpResponseMessage Post(Customer newCustomer)
{
    DataClassesDataContext db = new DataClassesDataContext();
    var response = Request.CreateResponse<Customer>(HttpStatusCode.Created, newCustomer);

    db.Customers.InsertOnSubmit(newCustomer);
    db.SubmitChanges();

    string uri = Url.Link("DefaultApi", new { id = newCustomer.Id });
    response.Headers.Location = new Uri(uri);

    return response;
}

在客户端,它运行在不同的端口号(即跨域)上,我使用以下 jQuery 代码:

<body>

<input type="button" value="click me" onclick="hello()" />

<script type="text/javascript">
    function hello() {
        //SEE: http://stackoverflow.com/questions/5241088/jquery-call-to-webservice-returns-no-transport-error
        $.support.cors = true;

        //var jsonObjects = [{ Name: "Name1", CellphoneNum: 1234657911 }];

        $.ajax({
            url: "http://localhost:26037/api/customer",
            type: "POST",
            crossDomain: true,
            data: { Name: "Name321", CellphoneNum: 1234657922 },
            dataType: "json",

            success: function (result) {
                alert("Success");
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert('Thrown Error: ' + thrownError);
                alert('xhr status: ' + xhr.status);
            }
        });
    }
    </script>
</body>

我的问题是,从客户端,在 IE 上将显示成功警报消息,并且将使用我的 POST 方法中的 LINQ 代码将数据插入到数据库中。但是,使用 Chrome 或 Firefox 时,数据也会插入到数据库中,并且 LINQ 代码将成功执行,但会显示一个带有空字符串错误和 0 xhr 状态的消息框。

为什么在服务器上发布并成功处理数据时,它只在 Firefox 和 Chrome 上报告错误?

4

2 回答 2

1

为了进行跨域调用,我在 IIS 上部署时在 Web 应用程序根文件夹中添加了 crossdomain.xml。与跨域.xml 有以下内容。

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*"/>
</cross-domain-policy>

我希望它也适用于您的情况。

于 2012-11-04T13:34:32.947 回答
1

看起来浏览器在报告 xhr 错误方面做得不好。下面的教程可能会对您有所帮助。此外,如果您还没有这样做,请确保将服务器端的“Access-Control-Allow-Origin”标头设置为您要允许的客户端域或“*”以允许所有跨域请求。

一般 CORS 教程:http ://www.html5rocks.com/en/tutorials/cors/

ASP.net 和 CORS: http ://encosia.com/using-cors-to-access-asp-net-services-across-domains/

于 2012-11-03T21:15:41.147 回答