1

asp.netWebAPIを利用してクロスドメインの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コードは正常に実行されますが、空の文字列エラーと0xhrステータスのメッセージボックスが表示されます。

データが投稿されてサーバーで正常に処理されているときに、FirefoxとChromeでのみエラーが報告されるのはなぜですか?

4

2 に答える 2

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 に答える
1

クロスドメイン呼び出しを行うために、IISに展開したときに、Webアプリケーションのルートフォルダーにcrossdomain.xmlを追加しました。crossdomain.xmlには次の内容があります。

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

それがあなたのケースでもうまくいくことを願っています。

于 2012-11-04T13:34:32.947 に答える