2015-11-11 4 views
1

Я действительно хочу ваш вариант. Мы обновляем проект .net MVC 3 до MVC 4 с веб-api 2, это веб-сервис. Звонки ajax - это андроидные машины с Devextreme/Phonegap.MVC 4 Web API 2 ajax вызов все параметры дополнительно

После обновления веб-службы, когда я называю логин от андроида я получаю «Нет HTTP ресурс не был найден соответствующий запрос URI" http://www.whatever.gr/MVCService/Actions/Login»

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

Мы не можем изменить источник на андроид приложения и Ajax вызова код ниже

function doLogin(username, password, callback) { 
    loading(true); 

    var dataStr = "uid=" + uid + "&username=" + username + "&password=" + password; 
    var success = false; 
    var token = ""; 
    $.ajax({ 
     type: "POST", 
     url: registrationServiceUrl + 'Login', 
     data: dataStr, 
     beforeSend: function() { 
      //alert("registration no: " + registrationid); 
     }, 
     success: function (retval) { 
      if (retval.indexOf('SUCCESS') == 0) { 
       success = true; 
       token = retval.substring(8); 
       //setTokenToSettings(token); 
      } else { 
       success = false; 
      }; 
      callback(success, token); 
      loading(false); 

     }, 
     error: function (retval) { 
      callback(success, token); 
      loading(false); 

     } 
    }); 
} 

Маршрут в MVC является

public static void Register(HttpConfiguration config) 
      { 
       // Web API configuration and services 

       // Web API routes 
       //config.MapHttpAttributeRoutes(); 

       config.Routes.MapHttpRoute(
        name: "DefaultApi", 
        routeTemplate: "api/{controller}/{id}", 
        defaults: new { id = RouteParameter.Optional } 
       ); 

       config.Routes.MapHttpRoute(
        name: "ActionApi", 
        routeTemplate: "api/{controller}/{action}/{id}", 
        defaults: new { id = RouteParameter.Optional } 
       ); 
      } 

Когда я ударил, как показано ниже с параметрами в браузере, я отвечу 'http://www.whatever.gr/MVCService/Actions/Login?param1=1&param=2&param3=3'.

Я хочу иметь поведение, когда хит «http://www.whatever.gr/MVCService/Actions/Login» или 'http://www.whatever.gr/MVCService/Actions/Login?param1=1&param=2&param3=3&invalidParamName=x.

И метод веб-службы для запуска с пустыми значениями параметров.

Но без установки дополнительных параметров в методе

public string Login(string pamar1 = "",string param2 = "", string param3 = "") 

С MVC 3 это работает нормально, как я уже говорил раньше.

Спасибо заранее и за ваше время.

+0

Привет, я не думаю, что это связано с вашим клиентским приложением. Некоторое время назад у меня была такая же проблема. Пожалуйста, взгляните на этот пост.http: //stackoverflow.com/questions/19093603/simple-post-to-web-api/19094245#19094245, а также увидите причину этого в этом вопросе http://stackoverflow.com/questions/19424493/why-do-asp-net-web-api-allow-only-one-parameter-for-post-method – Amila

+0

Я пробовал [HttpGet(), HttpPost()] public JsonResult Логин ([ FromBody] string uid, [FromBody] string username, [FromBody] строковый пароль), но я получаю Произошла ошибка – Dimitrios

+0

Я думаю, что это данные вызова ajax: dataStr $ .ajax ({ type: "POST", url: registrationServiceUrl + 'Login', data: dataStr, , но как это работает на MVC 3? – Dimitrios

ответ

0

В Web API очень просто запомнить, как происходит привязка параметров.

  • , если вы POST простых типов, Web API пытается связать его с URL
  • если вы POST сложный тип, Web API пытается связать его из тела запроса (это использует медиа-тип форматировщик).

Эта страница asp.net объясняет все это. http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

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