调用Web Api POST总是从jQuery接收null值

Ste*_*ins 6 ajax jquery asp.net-web-api

我正在使用ASP.NET Web API,我度过了美好的时光.至少对GET而言.出于某种原因,当我尝试通过jQuery发送数据$.post()$.ajax()由我收到的值ApiController总是空.更奇怪的是,用Fiddler向它发送数据就好了.我确定这是我在javascript中构建对象的问题,但我似乎无法找到它.这是代码:

// C#
[HttpPost]
public HttpResponseMessage BeginTrack([FromBody]string requestContext) {

        // requestContext is always null.  Except when it comes from Fiddler.

        RequestContext ctx = null;
        if (Request.Content.Headers.ContentType.MediaType == "application/json") {
            try {
                ctx = Json.Decode<RequestContext>(requestContext);
            } catch (Exception ex) {
                return Request.CreateErrorResponse(HttpStatusCode.InternalServerError,
                    "An error has occured while processing your request.  See Exception for details.", ex);
            }
        }

        if (ctx == null) //... 
Run Code Online (Sandbox Code Playgroud)

而jQuery ......

getRequestContext = function (source, docType, id, ip) {
    return { 
        SourceSite: source,
        DocumentType: docType,
        Id: id,
        HostUrl: document.URL,
        HostDomain: document.location.hostname,
        IPAddress: ip,
        UserAgent: navigator.userAgent,
        Referrer: document.referrer
    };
},

beginTracking = function (done, fail) {
    var data = JSON.stringify(getRequestContext('none', 'P', 0, 'ip'));
    $.post(
        serviceBase + "/Tracking/BeginTrack",
         data,
        done,
        "json"
        ).fail(fail);
}
Run Code Online (Sandbox Code Playgroud)

更新:显然,这在ASP.NET WebForms(.NET 3.5)中运行良好,但在同一项目中不适用于MVC4 ......

Ali*_*tad 5

你需要发送"=mystring"而不是"mystring"从jquery 发送.这是一个已知问题,这是由于数据在Web API中的映射方式.