manish.communityhub Ответов: 1

Сервер ответил статусом 500 в веб api на основе токенов при публикации из MVC с использованием json


вот мой код

<script>
    $('#btnLogin').click(function () {

        var body = {'grant_type': 'password','Email':$('#Email').val(),'password': $('#Password').val()};

        alert(JSON.stringify(body));

        $.ajax({
            url: 'http://localhost:46382/Token',
            method: 'POST',
            ContentType: 'application/x-www-form-urlencoded',
            data: body,
            success: function (d) {
                console.log(d);
                alert("Login successfully Successfully");
                sessionStorage.setItem("accessToken", response.access_token);
                window.location.href = 'home';
            },
            error: function (error) {
                alert("Error ");
            }
        });
    });
</script>


а остальные все настройки в web api по умолчанию

Что я уже пробовал:

Я также попытался изменить тип контента на application/json
и я добавил:
<add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Headers" value="Content-Type" />
      <add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" />
      <add name="Access-Control-Allow-Credentials" value="true" />

в веб-конфигурации
И это работает при отправке из кода позади,
но я хочу сделать это с помощью json

1 Ответов

Рейтинг:
2

Dave Kreskowiak

500 ошибок означают, что код на сервере по какой-то причине разбился или вышел из строя.

Это может быть связано с тем, что вы отправили параметры, которых он не ожидал, отправили их в формате, которого он не ожидал, значения вне диапазона, или код на сервере плохо написан и не проверяет входные параметры перед попыткой их обработки, или какая-то комбинация из вышеперечисленных.


manish.communityhub

Но он работает от контроллера вот код
HttpContent requestContent = new StringContent("grant_type=password&username=" + Username + "&password=" + Password, кодировка.UTF8, "application/x-www-form-urlencoded");

Dave Kreskowiak

Во-первых, это не имеет никакого отношения к проблеме.

Во-вторых, вы отправляете пароли между клиентом и контроллером открытым текстом! Не могли бы вы сделать эту штуку менее безопасной?

В своем коде, опубликованном выше, вы создаете объект JSON, но не заключаете строки электронной почты и пароля в одинарные кавычки. Это оскорбительная линия:

{'grant_type': 'пароль','письмо':$('#email'мы).Валь(),'пароль': $('#пароль').вал()}

Если должно быть ближе к этому:
{'grant_type': 'пароль','письмо':'$('#email'мы).функция val()','пароль': '$('#пароль').функция val()'}
Обратите внимание на цитаты?

manish.communityhub

Я изменил json
{ 'grant_type': 'пароль', 'электронная почта': "'" + $('#письмо').функция val() + "'", 'пароль': "'" + $('#пароль').функция val()+"'" };
Но на этот раз он показывает
{"ошибка":"unsupported_grant_type"}

Dave Kreskowiak

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

Richard Deeming

Вы же не хотите, чтобы эти одинарные кавычки были там! :)

Вы хотите, чтобы свойства объекта были установлены на значения, возвращаемые из .val() функция, а не литеральные строки.