0

POST別のドメインの Asp.Net Web API にデータを送信しようとしています。私はIE9/8をサポートする必要があるので、それCORSをカットしません. このような電話をかけると:

$.ajax({
type: "GET",
url: "http://www.myotherdomain.com/account",
data: "{firstName:'John', lastName:'Smith'}",
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
success: function(msg) {
    console.log(msg);
},
error: function(x, e) {
    console.log(x);
}
});​

次のようにGET要求します。

http://www.myotherdomain.com/account?
    callback=jQuery18008523724081460387_1347223856707&
    {firstName:'John',%20lastName:'Smith'}&
    _=1347223856725

この JSONP Formatter for ASP.NET Web API を実装したところ、サーバーは適切にフォーマットされた JSONP 応答で応答します。アカウント オブジェクトを使用するルートを登録する方法がわかりません。

config.Routes.MapHttpRoute(
    name: "Account",
    routeTemplate: "account",
    defaults: new { controller = "account", account = RouteParameter.Optional }
);

名前のないクエリ文字列パラメータからオブジェクトを逆シリアル化するにはどうすればよいですか?

4

1 に答える 1

2

JSON を使用する代わりに、パラメーターをクエリ文字列値として送信できます。次のモデルがあるとします。

public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

および次の API コントローラー:

public class AccountController : ApiController
{
    public HttpResponseMessage Get([FromUri]User user)
    {
        return Request.CreateResponse(HttpStatusCode.OK, new { foo = "bar" });
    }
}

そのように消費することができます:

$.ajax({
    type: 'GET',
    url: 'http://www.myotherdomain.com/account?callback=?',
    data: { firstName: 'John', lastName: 'Smith' },
    dataType: 'jsonp',
    success: function (msg) {
        console.log(msg);
    },
    error: function (x, e) {
        console.log(x);
    }
});
于 2012-09-10T06:32:36.613 に答える