6

私は ASP.NET Web API を使用しており、素晴らしい時間を過ごしています。少なくともGETで。何らかの理由で、jQuery$.post()またはを介し​​てデータを送信しようとすると$.ajax()、受信した値ApiControllerが常に null になります。さらに奇妙なのは、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) //... 

そして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);
}

更新: したがって、明らかにこれは ASP.NET WebForms (.NET 3.5) では正常に機能しますが、同じプロジェクトの MVC4 では機能しません...

4

1 に答える 1

5

jquery から"=mystring"ではなく送信する必要があります。"mystring"これは、データが Web API でマップされる方法に起因する既知の問題です。

于 2013-01-23T22:19:40.313 に答える