400通过JQuery使用WCF POST的错误请求HTTP响应

无法让我的JQuery POST被WCF服务接受。 这是来自javascript的POST:

function jqueryPost() {
    var url = "/LoggingTest";
    $.post(url, { message: "test message" });
}

这是我通过接口接受POST的方式:

[OperationContract]
[WebInvoke(Method = "POST",
           UriTemplate = "/LoggingTest",
           BodyStyle = WebMessageBodyStyle.Bare)]
void LoggingTest(string message);

并执行:

public void LoggingTest(string message)
{
    log.Debug(message, null);
}

当我调用jqueryPost函数时,我在Web检查器中看到一个400响应错误的HTTP 请求 。 不知道如何让POST请求工作。

(7/1加)
@詹姆斯,这里是网络督察的输出:

http:// localhost:4252 / LoggingTest HTTP信息
请求方法:POST
状态码:400错误请求
请求标题
接受:/
缓存控制:最大年龄= 0
内容类型:应用/ X WWW的窗体-urlencoded
产地:HTTP://本地主机:4252
引用站点:HTTP://本地主机:4252 /
User-Agent:Mozilla / 5.0(Windows; U; Windows NT 5.1; C - )AppleWebKit / 532.4(KHTML,如Gecko)Qt / 4.6.2 Safari / 532.4
X-要求 - 由于:XMLHttpRequest的
表格数据
消息:测试消息
响应头
内容长度:1165
内容类型:text / html的
日期:2010年7月1日星期四18:56:15 GMT
服务器:HTTPAPI / 1.0


所以,我刚刚结束这样做,Interface:

[OperationContract]
[WebInvoke(Method = "POST",
           UriTemplate = "LoggingTest/{logID}/{logLevel}?errorCode={errorCodeInt}",
           BodyStyle = WebMessageBodyStyle.Bare)]
void LoggingTest(string logID, string logLevel, int errorCodeInt, Stream message);

执行:

public void LoggingTest(string logID, string logLevel, int errorCodeInt, Stream message)
    {
        switch (logLevel)
        {
            case "error":
                log.Error(errorCodeInt, message, null);
                break;
            case "warn":
                log.Warn(errorCodeInt, message, null);
                break;
            case "info":
                log.Info(errorCodeInt, message, null);
                break;
            case "debug":
                log.Debug(errorCodeInt, message, null);
                break;
        }
    }

现在它起作用了。 必须与在UriTemplate中传递的参数有关,因为当我将其更改为传递参数时如此:

UriTemplate = "LoggingTest/{logID}/{logLevel}?errorCode={errorCodeInt}",

它开始接受POST。

编辑7/7:这也是最终的JavaScript:

jqueryPost('LoggingTest/LogID/debug?errorCode=0', { message: 'this is a test message'} ;

function jqueryPost(url, message) {
    $.post(url, message);
}

尝试在服务合同上添加以下行,我认为你应该使用WrappedRequest,并且使用Bare

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

看看这个帖子更多的装饰


它可能只是让它为你工作的难题的一部分,但是这让我暂时陷入了困境:

您可能需要仔细检查您的JSON语法,我认为它需要在变量和变量名称周围使用双引号字符串。

例如

function jqueryPost() {
    var url = "/LoggingTest";
    $.post(url, { message: "test message" });
}

需要是:

function jqueryPost() {
    var url = "/LoggingTest";
    $.post(url, { "message": "test message" });
}

nb双引号“消息”


编辑:感谢下面的反馈,这里有几个链接可能对格式化JSON有用:

  • 雅虎开发者网络 - 关于JSON格式
  • json.org
  • WCF可以接受使用单引号和非引号标识符编码的JSON吗?
  • 链接地址: http://www.djcxy.com/p/46617.html

    上一篇: 400 Bad Request HTTP Response using a WCF POST via JQuery

    下一篇: WPF Validation: Clearing all validation errors