Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 21428|Odpoveď: 1

[WebAPI] Problémy a riešenia pre medzidoménové volania AJAX na ASP.NET MVC alebo WebAPI služby

[Kopírovať odkaz]
Zverejnené 1. 12. 2015 15:20:20 | | | |
Popis problému
Keď sa volanie naprieč doménami ASP.NET MVC alebo služba napísaná ASP.NET Web API, stáva sa nedostupnou.
Metóda rozmnožovania
  • Použite šablónu na vytvorenie najjednoduchšieho ASP.NET projektu Web API, debugujte ho, aby ste sa uistili, že funguje
  • Vytvorte ďalší projekt len s jednou HTML stránkou a vytvorte AJAX volanie
  • Otvorte túto stránku vo svojom prehliadači a nájdete nasledujúcu chybu (405: Metóda nie je povolená)

    Poznámka: Rovnaká situácia nastáva v ASP.NET dopravnej nehode. V niektorých prípadoch sa MVC dá použiť aj priamo na vývoj služieb, čo má svoje výhody a nevýhody v porovnaní s WebAPI. Nižšie je uvedený príklad služby vyvinutej pomocou MVC


Analýza príčin
Základným dôvodom problému naprieč doménami je, že prehliadač má nízke oprávnenia na obe požiadavky a zvyčajne povoľuje volania len na zdroje v lokálnej doméne, pokiaľ mu cieľový server výslovne neoznámi, že sú povolené hovory cez domény.
Preto, hoci je problém medzi doménami spôsobený správaním prehliadača, riešenie je na strane servera. Pretože nie je možné vyžadovať, aby všetci klienti znížili bezpečnosť.

riešenie
Pre projekty ASP.NET MVC aj ASP.NET Web API som si urobil prieskum a dospel som k záveru, že nasledujúci scenár je uskutočniteľný.
Pre ASP.NET MVC stačí pridať nasledujúci obsah do web.config


Pre ASP.NET webové API je okrem vyššie uvedených nastavení potrebné pridať špeciálny dizajn, ktorý spočíva v pridaní metódy OPTIONS pre každý API Controller, ale bez toho, aby sa niečo vracalo.
public string Options()
{
return null; HTTP 200 odpoveď s prázdnym telom
}

Poznámka: Túto funkciu je možné vykonať aj po určitom výskume a možno bude lepšie ju navrhnúť ako filter.





Predchádzajúci:Oficiálny citát z kanálového zápisníka od Lenova z 1. decembra
Budúci:Implementujte jednoduchú Http službu pomocou HttpListener
 Prenajímateľ| Zverejnené 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>
Kopírovať kód


Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com