2010-09-27 3 views
0

У меня есть запрос JSON, который проверяет сервер, если имя пользователя уже было принято во время процедуры регистрации.Ошибка во время запроса JSON

Это JQuery вызов:

// Instant check availability of the username 
$("#txtUserName").blur(function() { 
    if ($("#txtUserName").val() == "") return; 
    $.ajax({ 
     type: 'post', 
     url: '/Login/CheckUserName', 
     data: "{userName: '" + $("#txtUserName").val() + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(message) { 
      //Set the spanChecking text letting user know if the uname is available 
      if (message.d == true) { 
       $("#userNameCheck").css({ "color": "red", "font-weight": "bold", "font-size": "small", "padding-left": "5px" }); 
       $("#userNameCheck").text("Non disponibile"); 
      } 
      else { 
       $("#userNameCheck").css({ "color": "green", "font-weight": "bold", "font-size": "small", "padding-left": "5px" }); 
       $("#userNameCheck").text("Disponibile"); 
      } 
     }, 
     error: function(errormessage) { 
      //this is just to see if everything is working. Remove before deploy 
      $j("#userNameCheck").text(errormessage.responseText); 
     } 
    }); 
}); 

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

[HttpPost] 
public JsonResult CheckUserName(string userName) { 
    if (Membership.GetUser(userName) == null) 
     return Json(false); 
    else 
     return Json(true); 
} 

Во всяком случае я не понимаю, почему я получаю сообщение об ошибке 500 с сервера. Глядя на него с Fiddler я могу видеть, что запрос RAW является

POST http://localhost:1037/Login/CheckUserName HTTP/1.1 
Host: localhost:1037 
Connection: keep-alive 
Referer: http://localhost:1037/Login/Register 
Content-Length: 22 
Origin: http://localhost:1037 
X-Requested-With: XMLHttpRequest 
Content-Type: application/json; charset=UTF-8 
Accept: application/json, text/javascript, */* 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 

{userName: 'sampleuser'} 

но контроллер Действие получить нулевой параметр для имени пользователя. Я вижу это через Fiddler и даже устанавливаю точку останова в коде.

Где я делаю неправильно?

EDIT

ошибка возвращается обратно к клиенту

The value cannot be null. Parameter name: username 

Пожалуйста, обратите внимание, что имя параметра в сообщении об ошибке не сохраняя оригинальный случай. Является ли это поведением поставщика членства или я должен опустить регистр параметра?

ответ

0

Вы отправляете запрос как JSON, но на сервере ничего нет, что понимает или ожидает этот формат. У вас есть действие контроллера, которое ожидает тип контента application/x-www-form-urlencoded. Попробуйте вместо этого:

data: { userName: $('#txtUserName').val() }, 
contentType: 'application/x-www-form-urlencoded', 

Это также имеет преимущество, чтобы заботиться о правильно URL кодирующей параметры, отправленной на сервер, который в версии с помощью конкатенации строк, не был достигнут.

1

Попробуйте использовать этот формат для параметра data в вызове вместо:

data: "userName=" + $("#txtUserName").val() 
0

Вы проверили маршрут, а именно капитализация?

Оставьте свой маршрут для этого звонка, может быть, там что-то есть?

2

Это:

{userName: 'sampleuser'} 

... не действует в формате JSON. Это и может быть то, что вы хотите:

{"userName": "sampleuser"} 

Смотрите RFC для деталей формата JSON.

Смежные вопросы