【问题标题】:Calling Web Api POST always receives null value from jQuery调用 Web Api POST 总是从 jQuery 接收空值
【发布时间】:2013-01-07 13:09:28
【问题描述】:

我正在使用 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) //... 

还有 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 中却不行...

【问题讨论】:

    标签: jquery ajax asp.net-web-api


    【解决方案1】:

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

    【讨论】:

    • 所以基本上只是在data 前面加上=?当我回去工作时,我会试一试。谢谢。
    • 是的。原来这是问题所在。在前面加上一个'=',一切都很好。谢谢!
    猜你喜欢
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多