Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

Kibork avatar Kibork 87 Точки

[Technical Issue] Web Services and Cloud - Web Api - POST query joint OPTIONS

Здраейте, колеги!

От отбор French-Lime, имаме проблем с POST заявките, и по - точно, когато в POST заявката вкараме хедъри.

Това е кода на нашият AJAX Requester:

        $.ajax({
            url: url,
            type: method,
            data: data || undefined,
            contentType: 'application/x-www-form-urlencoded',
            dataType: 'json',
            headers: headers,
            success: function (result) {
                deferred.resolve(result);
            },
            error: function (error) {
                deferred.reject(error);
            },
            onprogress: function (event) {
                deferred.notify(event.loaded / event.total);
            }
        });

Направили сме необходимите настройки в "Web.config" в бекенда:
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Methods" value="POST, OPTIONS, PUT, DELETE" />
        <add name="Access-Control-Allow-Headers" value="Authorization" />
        <add name="Access-Control-Max-Age" value="86400" />
      </customHeaders>
    </httpProtocol>

И когато извикаме POST заявка, с хедър автентикация ("Authorization: Bearer ..."), тя се изпраща, като OPTIONS.

В същото време тази заявка със същите хедъри, през Postman, минава без проблем.

Отбор French-Lime благодари предварително, за всякаква помощ!

Поздрави!

2
C# Web Services & Cloud
ttitto avatar ttitto 1153 Точки

French-Lime,

тъкмо написах регистрацията и се сетих, че имахте проблем. Ако не сте го решили ви поствам направо кода:

register = function (user) {
var d = $q.defer(),
urlEncoded = {'Content-Type': 'application/x-www-form-urlencoded'};
angular.extend(service.headers, urlEncoded);

$http.post(userServiceUrl + 'api/account/register',
'Email=' + user.email + '&password=' + user.password + '&confirmPassword=' + user.confirm,
{ headers: service.headers})
.success(function (userRegistrationData) {
d.resolve(userRegistrationData);
})
.error(function (registrationErr) {
d.reject(registrationErr);
});
return d.promise;
},

2
AleksandurSeferinkin avatar AleksandurSeferinkin 333 Точки

По принцип jQuery праща OPTIONS заявка при CORS такива, за да провери дали сървъра го разрешава и след това продължава със съществената. Сиреч сървъра трябва да отговаря и на OPTIONS заявки с празно body и хедърите от web.config. В интернет тази заявка се среща като "preflight request". Също така не във всички случаи ще е необходима, нито при всички браузъри. Много е относително кога ще бъде извикана... но сървъра трябва да го има предвид :)

3
16/04/2015 09:30:17
Kibork avatar Kibork 87 Точки

Благоварим ви за отделеното време и полезните отговори!

Проблема ни е решен и представянето мина както трябва.

Поздрави,

French-Lime!

1
jabalka avatar jabalka 960 Точки

Само да потвърдим, че беше решен с по-работещи настройки на CORS, за които ни светнаха екипа Deep Coffee. Може да видите заветните настройки в техния Startup.cs или в нашия Startup.cs.

Благодарим на всички, които ни помогнаха и споделяха информация с нас, отговаряха на въпроси и терзания - много сте мили :)

Дано при всички защитите са минали добре. Не знам за вас - аз отново научих доста по време на разработката на екипния проект.

 

Успех на изпита и до скоро!

 

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.