400 Плохих Запросов Ответ HTTP с помощью POST WCF с помощью JQuery

Наличие проблемы, заставляющей мой POST JQuery быть принятым Сервисом WCF. Вот POST из JavaScript:

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

Это - то, как я принимаю должность через Интерфейс:

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

И реализация:

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

Когда я вызываю функцию jqueryPost, я вижу в веб-инспекторе ответ HTTP 400 Плохих Запросов. Не уверенный, как заставить запрос POST работать.

(Прибавляемый 7/1)
@James, вот вывод от веб-инспектора:

http://localhost:4252/LoggingTest информация о HTTP
Запрос Method:POST
Состояние Code:400 плохо запрашивает
Заголовки запроса
Accept:/
Cache-Control:max-age=0
Content-Type:application/x-www-form-urlencoded
Origin:http://localhost:4252
Referer:http://localhost:4252/
User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; C-) AppleWebKit/532.4 (KHTML, как Геккон) спокойный/4.6.2 Safari/532.4
X-Requested-With:XMLHttpRequest
Данные формы
сообщение message:test
Заголовки ответа
Содержание-Length:1165
Content-Type:text/html
Date:Thu, 01 июля 2010 18:56:15 GMT
Server:Microsoft-HTTPAPI/1.0

7
задан Ghyath Serhal 28 October 2011 в 13:08
поделиться

3 ответа

Итак, я только что сделал это, Интерфейс:

[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);
}
2
ответ дан 7 December 2019 в 14:28
поделиться

Попробуйте добавить следующую строку в контракт на обслуживание, также я думаю, вам следует использовать WrappedRequest, вставленный из Bare

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

, посмотрите этот пост для получения дополнительных украшений

1
ответ дан 7 December 2019 в 14:28
поделиться

Это может быть только одна часть головоломки, чтобы заставить его работать на вас, но на какое-то время меня это зацепило:

Возможно, вам придется дважды проверить свой синтаксис JSON, я думаю, что это должны заключаться в строки в двойных кавычках и вокруг переменной, и вокруг имени переменной.

например.

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

должно быть:

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

n.b. двойные кавычки "сообщение"


РЕДАКТИРОВАТЬ: Спасибо за отзыв ниже, вот несколько ссылок, которые могут оказаться полезными для форматирования JSON:

1
ответ дан 7 December 2019 в 14:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: