Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 21428|Odpověď: 1

[WebAPI] Problémy a řešení pro AJAX mezidoménová volání na ASP.NET MVC nebo WebAPI služby

[Kopírovat odkaz]
Zveřejněno 01.12.2015 15:20:20 | | | |
Popis problému
Když se mezidoménové volání ASP.NET MVC nebo službu napsanou ASP.NET Web API, stává se nedostupnou.
Metoda reprodukce
  • Použijte šablonu k vytvoření nejjednoduššího ASP.NET projektu Web API, ladíte ho, abyste se ujistili, že funguje
  • Vytvořte další projekt s jednou HTML stránkou a vyvolejte AJAX
  • Otevřete tuto stránku ve svém prohlížeči a najdete následující chybu (405: Metoda není povolena)

    Poznámka: Stejná situace nastává v ASP.NET dopravní nehodě. V některých případech lze MVC také použít přímo k vývoji služeb, což má své výhody a nevýhody ve srovnání s WebAPI. Níže je příklad služby vyvinuté pomocí MVC


Analýza příčin
Základním důvodem problému s křížovými doménami je, že prohlížeč má nízká oprávnění na oba požadavky a obvykle povoluje volání pouze na zdroje v lokální doměře, pokud mu cílový server výslovně neřekne, že jsou povolena volání přes domény.
Proto, i když je problém mezi doménami způsoben chováním prohlížeče, řešení je na straně serveru. Protože není možné vyžadovat, aby všichni klienti snížili bezpečnost.

řešení
Pro ASP.NET typy projektů s MVC i ASP.NET Web API jsem provedl průzkum a zjistil, že následující scénář je proveditelný.
Pro ASP.NET MVC stačí přidat následující obsah do web.config


Pro ASP.NET webových API je kromě výše uvedených nastavení potřeba přidat speciální návrh, který spočívá v přidání metody OPTIONS pro každý API Controller, ale bez nutnosti cokoli vracet.
public string Options()
{
return null; HTTP 200 odpověď s prázdným tělem
}

Poznámka: Tuto funkci lze také provést s určitým výzkumem a možná bude lepší ji navrhnout jako filtr.





Předchozí:Oficiální citát z kanálového zápisníku od Lenova z 1. prosince
Další:Implementujte jednoduchou Http službu pomocí HttpListener
 Pronajímatel| Zveřejněno 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>
Kopírovat kód


Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com