Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 21428|Відповідь: 1

[WebAPI] Проблеми та рішення для крос-доменних викликів AJAX до ASP.NET MVC або WebAPI сервісів

[Копіювати посилання]
Опубліковано 01.12.2015 15:20:20 | | | |
Опис проблеми
Коли міждоменний виклик ASP.NET MVC або сервіс, написаний ASP.NET веб-API, він стає недоступним.
Метод розмноження
  • Використовуйте шаблон, щоб створити найпростіший ASP.NET Web API проєкт, відлагодіть його, щоб переконатися, що він працює
  • Створіть інший проєкт лише з однією HTML-сторінкою і зробіть AJAX-виклик
  • Відкрийте цю сторінку у вашому браузері, і ви знайдете таку помилку (405: Метод не дозволено)

    Примітка: Така сама ситуація трапляється у ASP.NET MVC. У деяких випадках MVC також можна використовувати безпосередньо для розробки сервісів, що має свої переваги та недоліки порівняно з WebAPI. Нижче наведено приклад сервісу, розробленого за допомогою MVC


Аналіз причин
Основна причина проблеми міждоменної проблеми полягає в тому, що браузер має низькі привілеї на обидва запити і зазвичай дозволяє виклики ресурсів лише в локальному домені, якщо цільовий сервер явно не повідомляє про дозволені крос-доменні виклики.
Отже, хоча проблема міждоменної роботи спричинена поведінкою браузера, рішення знаходиться на стороні сервера. Тому що неможливо змусити всіх клієнтів знижувати безпеку.

рішення
Для ASP.NET як типів проєктів MVC, так і ASP.NET Web API я провів дослідження і визначив, що наступний сценарій є можливим.
Для ASP.NET MVC потрібно додати наступний контент до web.config


Для ASP.NET веб-API, окрім вищезазначених налаштувань, потрібно додати спеціальний дизайн — додати метод OPTIONS для кожного контролера API, але без жодного повернення.
публічні рядкові опції()
{
return null; Відповідь HTTP 200 з порожнім тілом
}

Примітка: цю функцію можна виконати за допомогою деяких досліджень, і, можливо, краще спроектувати її як фільтр.





Попередній:Офіційне цитування з блокнота каналу Lenovo від 1 грудня
Наступний:Реалізуйте простий HTTP-сервіс за допомогою HttpListener
 Орендодавець| Опубліковано 01.12.2015 15:39:52 |
  1. <system.webServer>

  2. <httpProtocol>

  3. <customHeaders>

  4. <add name="Access-Control-Allow-Origin" value="*" />

  5. <add name="Access-Control-Allow-Headers" value="Content-Type" />

  6. <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />

  7. </customHeaders>

  8. </httpProtocol>

  9. <handlers>

  10. <remove name="ExtensionlessUrlHandler-Integrated-4.0" />

  11. <remove name="OPTIONSVerbHandler" />

  12. <remove name="TRACEVerbHandler" />

  13. <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

  14. </handlers>

  15. </system.webServer>
Копія коду


Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com