Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 21428|Отговор: 1

[WebAPI] Проблеми и решения за AJAX кросдомейн повиквания към ASP.NET MVC или WebAPI услуги

[Копирай линк]
Публикувано в 1.12.2015 г. 15:20:20 ч. | | | |
Описание на проблема
Когато кросдомейн повикване ASP.NET MVC или услуга, написана ASP.NET уеб API, тя става недостъпна.
Метод на размножаване
  • Използвайте шаблон, за да създадете най-прост ASP.NET уеб 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
 Хазяин| Публикувано в 1.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