Подтвердить что ты не робот

HTTP Post to Web API 2 - Запрос параметров получен и обработан без дальнейшего запроса

У меня есть веб-приложение, использующее MVC и AngularJS, который подключается к веб-API 2 api, который я создал в отдельном проекте.

В настоящее время я получаю информацию от Api без проблем.

Однако, когда я пытаюсь выполнить HTTP-сообщение, я не получаю ответа, изначально у меня возникала проблема с запросом на предполетный запрос, теперь я обработал это в своем контроллере, однако он не отправляет надлежащий запрос после у него есть сообщение ОК.

Я включил свой код для Angular Factory и С# Controller в API.

[EnableCors(origins: "*", headers: "*", methods: "*")]
public class RegisterController : ApiController
{
    public string Post()
    {

        return "success";
    }

    public HttpResponseMessage Options()
    {
        return new HttpResponseMessage { StatusCode = HttpStatusCode.OK };
    }
}


var RegistrationFactory = function($http, $q, ApiAddress) {
return function(model) {
   // $http.post(ApiAddress.getApiAddress() + '/Register/Post', model.ToString());

    $http({
        method: "POST",
        url: ApiAddress.getApiAddress() + '/Register/Post',
        data: model,
        headers: { 'Content-Type': 'application/json; charset=utf-8' }
    }).success(function(data) {
        $location.path("/");
    });
}
};

RegistrationFactory.$inject = ['$http', '$q', 'ApiAddress'];

Изменить:

Я до сих пор не испытываю никакой радости от этого, однако я тестировал в Internet Explorer, и он работает без проблем.

У меня есть работа в Chrome, начиная с отключенной веб-безопасности, но, очевидно, это не идеально, поскольку она не будет работать на ПК пользователя с включенной безопасностью.

4b9b3361

Ответ 1

Я вижу, что вы сделали адаптацию для CORS на стороне сервера. Но я не вижу адаптации на стороне клиента (javascript). Может быть, вы должны добавить код ниже, прежде чем звонить в службу.

$http.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];

Сообщите мне, исправляет ли это проблему. Работал для меня во всех сценариях:).

Отношения Himanshu

Ответ 2

Странно, что ваши GET работают, но ваши POST не делают.

Я бы порекомендовал запустить код в Google Chrome с включенной защитой веб-сайта (так что мы можем наблюдать за тем, как он идет не так) и с показанными вариантами разработчика F12.

Выберите вкладку "Сеть", запустите свой код и посмотрите, что произойдет, когда вызывается POST.

Возвращает ли ваш сервис статус "200 OK" или какое-то другое значение?

Возвращается ли какой-либо ответ?

Возможно, стоит попробовать это и добавить скриншот результатов в исходный вопрос. Это может помочь определить причину.

Я до сих пор не испытываю никакой радости от этого, однако я тестировал в Интернете Explorer, и он работает без каких-либо проблем.

Btw, у вас нет какой-либо единой системы регистрации в вашей компании, не так ли? У нас были проблемы, когда IE работает нормально, но другие браузеры не допускают единого входа. Просто мысль...

Ответ 3

Для CORS требуется предварительный предлог OPTIONS, который имеет HTTP-заголовки в своем ответе, которые сообщают браузеру, разрешено ли ему доступ к ресурсу.

например. Заголовки ответов HTTP:

Access-Control-Allow-Headers: authorization
Access-Control-Allow-Origin: *

Поскольку у вас есть собственный обработчик параметров на вашем контроллере С#, кажется, что эти HTTP-заголовки не возвращаются, что позволяет браузеру выполнить вызов после предполета.

Избегайте метода "Параметры", и вам должно быть хорошо.