Форум программистов, компьютерный форум, киберфорум
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 1
Регистрация: 23.10.2009
Сообщений: 22
1
.NET 4.x

Client ASP.NET MVC + Angular и Server side ASP.NET WEB.API

09.11.2016, 22:26. Показов 3419. Ответов 2

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Не первый день бьюсь над задачей, не могу понять в чем причина.

Хочу создать почти HelloWorld решение, для обмена информацией между клиентом и сервером посредством Angular (разные адреса ресурсов).

Серверная часть, стандартная функция (как ValuesController) для метода GET и POST, контроллер требует авторизации.

Клиентская часть, страница регистрации и авторизации и страница получения данных (метод GET) и страница отправки данных (метод POST).

В конфигурации сервера указал разрешение для соединения:

HTML5
1
2
3
4
5
6
7
<httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="http://localhost:16174" />
      <add name="Access-Control-Allow-Headers" value="Content-Type, authorization, Accept, X-Requested-With" />
      <add name="Access-Control-Allow-Methods" value="GET, POST" />
    </customHeaders>
  </httpProtocol>
Метод для GET выглядит проще некуда:

C#
1
2
3
4
5
[HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "GET1", "GET2" };
        }
и для POST:

C#
1
2
3
4
5
[HttpPost]
        public IEnumerable<string> Post()
        {
            return new string[] { "POST_Param1", "POST_Param2" };
        }
У контроллера атрибут Authorize.

Клиентская часть:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var serverAddress = "http://localhost:1513";
 
var app = angular.module('appHello');
 
app.controller("controllerHello", [
        "$scope", "$http", function ($scope, $http) {
 
            var token = sessionStorage.getItem(tokenKey);
 
            $http({
                method: 'GET',
                url: serverAddress + '/api/EmployeeAPI',
                headers: { 'authorization': 'bearer ' + token }
            }).then(function(response) {
                $scope.cash = response.data;
 
            }, function(response) {
                console.error("Connect error");
            });
        }
    ]);
Результат запроса:

Request:

OPTIONS /api/EmployeeAPI HTTP/1.1
Host: localhost:1513
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Access-Control-Request-Method: GET
Origin: http://localhost:16174
User-Agent: Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.35 Safari/537.36
Access-Control-Request-Headers: authorization
Accept: */*
Referer: http://localhost:16174/Employee/Index
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4

Response:

HTTP/1.1 405 Method Not Allowed
Cache-Control: no-cache
Pragma: no-cache
Allow: GET
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcU2l0ZXNcVGVzdFxUZXN0U2RcU291cmNlXFNlcnZlclxhcGlcRW1wbG95ZWVBUEk=?=
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: http://localhost:16174
Access-Control-Allow-Headers: Content-Type, authorization, Accept, X-Requested-With
Access-Control-Allow-Methods: GET, POST
Date: Wed, 09 Nov 2016 18:59:34 GMT
Content-Length: 108

Ответ сервера:
{"Message":"Запрошенный ресурс не поддерживает HTTP-метод "OPTIONS"."}

Проблема заключается в том что не могу понять почему отправляется кросс-доменный запрос OPTIONS а обоих случаях что GET что POST а не GET или POST.
Если свои заголовки не подключать (authorization для передачи токена) то запрос корректно уходит.

Что я делаю не так, в чем проблема?
Миниатюры
Client ASP.NET MVC + Angular и Server side ASP.NET WEB.API   Client ASP.NET MVC + Angular и Server side ASP.NET WEB.API  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.11.2016, 22:26
Ответы с готовыми решениями:

При создании проекта ASP.NET Aplicetion выскакивает сообщение Web server is not running ASP/NET version 1.1
При создании проекта ASP.NET Aplicetion выскакивает сообщение Web server is not running ASP/NET...

Ошибка VS.Net has detected that the specified Web server is not running ASP.NET version 1.1.
Всем привет! в VS.Net создаю новый проект ASP.NET Web Application При создании выдает ошибку -...

ASP.NET Core или ASP.NET MVC
Здравствуйте После изучение основ c# я решил выбрать направление веб разработки. Подскажите какие...

ASP.NET или ASP.NET MVC
Посоветуйте какую технологию лучше начать изучать ASP.NET или ASP.NET MVC. Не содной ни c другой...

2
2756 / 2059 / 384
Регистрация: 22.07.2011
Сообщений: 7,781
10.11.2016, 01:17 2
Тут дело не в asp net , это некоторые браузеры при кросс-доменных запросах делают предварительные проверочные запросы. - из соображений безопасности , на что сервер может отреагировать и дать запрет. если потребуется.

В вашем случае , нужно просто разрешить данный тип запроса , на уровне веб.апи это делается через config.EnableCors из пакета Microsoft.AspNet.WebApi.Cors

П.С Если скрипт запроса исполняется в том же домене , не нужно указывать полный адрес , достаточно указать относительный путь.
1
0 / 0 / 1
Регистрация: 23.10.2009
Сообщений: 22
10.11.2016, 08:21  [ТС] 3
Действительно, ответ был прост.
Спасибо за подсказку, перепроверил с предварительными методами, GET и POST работают корректно.
Успехов в программировании!
0
10.11.2016, 08:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2016, 08:21
Помогаю со студенческими работами здесь

Посоветуйте пожалуйста литературу ASP.Net web API
Здравствуйте! Мне нужно изучить технологию ASP.Net web API. Посоветуйте пожалуйста литературу или...

В чем отличие: создать в VS web-сайт от создания приложения ASP.NET MVC 4?
Собственно вот и есть такой вопрос, просто решил освоить C# именно для написания сайтов. Знаю...

Могу ли я отправить запрос к Web-сервису через SOAP протокол в ASP(не ASP.net)???
Сразу извиняюсь - запутался совсем. Могу ли я отправить запрос к Web-сервису через SOAP протакол...

Минусы разработки web api на VS2010 c ASP.net MVC4 по сравнению с новыми возможностями
Уважаемые Гуру! Работаю на VS 2019 с Blazor. Нужно web api для поставки данных из БД MySQL....

ASP.NET и ASP.NET MVC
Добрый день, форумчане. Объясните мне, пожалуйста, простым языком, чем отличаются технологии...

Стоит ли учить asp.net, если скоро станет asp.net core?
Всем привет Если я правильно понимаю, лучше учить Core ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru