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

我已经为 ASP.NET Web API 实现了这个 JSONP 格式化程序,并且我的服务器使用格式正确的 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 回答