Отправка данных в службу Restful WCF с использованием ExtJS

Вот как моя служба WCF определяется для аутентификации пользователя:

[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json)]
string validateUser(string username, string password);

В качестве результата он просто возвращает "Validated" или "NotValidated".

И мой код ExtJS:

function loginclick(btn) {
                    var form = mainPanel.getForm();
                    if (form.isValid()) {
                        var userget = Ext.getCmp('txtuser').value;
                        var passget = Ext.getCmp('txtpass').value;
                        var myparams = { 'username': userget, 'password': passget };

                        Ext.Ajax.request({
                            url: 'http://localhost:52984/ExtJsRestfulService.svc/validateUser',
                            params: Ext.encode(myparams),                              
                            method: 'POST',
                            headers: this.header || { 'Content-Type': 'application/json;charset=utf-8' },
                            success: function (response, options) {
                                var s = response.responseText;
                                Ext.MessageBox.alert('Success', s);

                            },
                            failure: function (response, options) {
                                Ext.MessageBox.alert('Failed', 'Unable to get');
                            }

                        });
                    }

                }

Когда я нажимаю кнопку входа в систему, я получаю сообщение об ошибке неверного запроса (400). Мой сервис не в том же решении. Когда я отправляю данные в форму aspx в том же решении, это работает. Что я делаю не так?


person user1640256    schedule 21.11.2013    source источник


Ответы (2)


Как насчет:

                             Ext.Ajax.request({
                             url: 'http://yourdomain:52984/ExtJsRestfulService.svc/validateUser?username='+userget+'&password='+passget,
                             params: Ext.encode(myparams),                              
                             method: 'GET',
                             headers: this.header || { 'Content-Type': 'application/json;charset=utf-8' },
                            success: function (response, options) {
                                var s = response.responseText;
                                 Ext.MessageBox.alert('Success', s);

                             },
                             failure: function (response, options) {
                                 Ext.MessageBox.alert('Failed', 'Unable to get');

                         }

                     });

Можете ли вы получить параметры из URL-адреса?

person code4jhon    schedule 21.11.2013
comment
Извините за поздний ответ, так как была поздняя ночь, когда вы разместили ответ. Это сработало достаточно хорошо. Единственное, что я изменил, это то, что вместо GET мне пришлось использовать POST. Большое спасибо. - person user1640256; 22.11.2013

Пробовали без кодировки?

пытаться

params: {

'username': userget,
'password': passget

}

Почему у вас в два раза больше конфига params?

Вы не должны использовать Ext.getCmp, вместо этого используйте Ext.ComponentQuery.query('myXtype[itemId=myItemId]')[0]; http://docs.sencha.com/extjs/4.2.2/#!/api/Ext.ComponentQuery

or

определить службу таким образом, чтобы вызов к ней был выполнен, например

string validateUser();

затем внутри службы сделайте что-то похожее на:

String pass = request.getParameter("password");

как в джаве

person code4jhon    schedule 21.11.2013
comment
Та же ошибка: NetworkError: 400 Bad Request — localhost:52984/ExtJsRestfulService.svc/validateUser. Но на этот раз в окне сообщения отображалось «Невозможно получить». - person user1640256; 21.11.2013
comment
Привет, я попытался без указания параметров в объявлении и реализации службы, и я мог попасть в службу. Тем не менее я не могу прочитать параметры. Ситуация такова, что мне нужно передать параметры, так как я не знаю, где еще этот сервис будет использоваться. - person user1640256; 21.11.2013