Почему изменение параметра контроллера вызывает ошибку HTTP Post 404? - PullRequest
0 голосов
/ 17 декабря 2018

Я занимаюсь разработкой веб-приложения Azure с базой данных.У меня есть модель и контроллер для базы данных.Я пытаюсь разместить данные в базе данных, но не могу понять, почему этот код отправляет ошибку 404 при отправке данных из Web-клиента в контроллер.

Вот как я отправляю данные в AngularJS (параметр является строкой Json):

$http({
        method: 'post',
        url: serviceBasePath + "/api/suscribe",
        data: parameter,
        headers: { 'Content-Type': 'application/json' }
    }).then(function (response) {
        userService.SetCurrentUser(response.data);
        defer.resolve(response.data);
    }, function (error) {
        defer.reject(error.data);
    })

На стороне контроллера я получаю 404, если контроллер:

[HttpPost]
[Route("api/suscribe")]
public IHttpActionResult PostGTW_Utilisateur(String JsonString)
{
    //
}

Но если я оставлю модель в качестве параметра, ошибка 404 исчезнет:

[HttpPost]
[Route("api/suscribe")]
public IHttpActionResult PostGTW_Utilisateur(User u) 
{
    //
}

error 404 on post request with Json data Класс объекта Json:

public class JsonSuscribeModel
{
    public Utilisateur user { get; set; }
    public string guid { get; set; }
    public string password2 { get; set; }
}

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Вы пропустите конечную точку, так как она не знает, что такое JsonString.Вы отправили JSON, но в модели контроллера вы сказали ему прослушивать строку.Откройте Chrome (или другие) инструменты разработчика и посмотрите ТОЧНО, что вы отправляете с запросом.

Вот еще один совет:

$http({
        method: 'post',
        url: serviceBasePath + "/api/suscribe",
        data: parameter,
        headers: { 'Content-Type': 'application/json' }
    }).then(function (response) {
        userService.SetCurrentUser(response.data);
        defer.resolve(response.data);
    }, function (error) {
        defer.reject(error.data);
    })

Я много раз видел злоупотребление обещаниями ТАК,Зачем вам использовать $ http (что само по себе обещание), а затем обработать его в сервисе и вернуть ДРУГОЕ обещание?Вы можете просто вернуть $ http (и разрешить его обещания в контроллере. Вам все равно придется разрешить эти новые обещания, которые вы возвращаете, так что зачем делать дополнительный шаг.

 return $http({
            method: 'post',
            url: serviceBasePath + "/api/suscribe",
            data: parameter,
            headers: { 'Content-Type': 'application/json' }
        }).then(function (response) {
            userService.SetCurrentUser(response.data);
            return response.data;
        }, function (error) {
            return error.data;
        })

Таким образом, вы возвращаете все$ http и вы указываете, что возвращать в случае успеха и ошибки. Поскольку это обещание, оно будет вести себя так же, как и раньше.

0 голосов
/ 17 декабря 2018

Спасибо за советы.Решением было использовать JsonModel, который у меня был в качестве параметра:

public IHttpActionResult PostGTW_Utilisateur(JsonSuscribeModel JsonModel)
...