Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 21428|Antwoord: 1

[WebAPI] Problemen en oplossingen voor AJAX cross-domain aanroepen naar ASP.NET MVC- of WebAPI-diensten

[Link kopiëren]
Geplaatst op 01-12-2015 15:20:20 | | | |
Probleembeschrijving
Wanneer een cross-domain aanroep ASP.NET MVC of een dienst geschreven ASP.NET Web API, wordt deze ontoegankelijk.
Voortplantingsmethode
  • Gebruik een sjabloon om een eenvoudigst ASP.NET Web API-project te maken, debug het om zeker te zijn dat het werkt
  • Maak een ander project aan met slechts één HTML-pagina en maak een AJAX-aanroep
  • Open deze pagina in je browser en je vindt de volgende foutmelding (405: Methode niet toegestaan)

    Opmerking: Dezelfde situatie geldt bij ASP.NET MVC. In sommige gevallen kan MVC ook direct worden gebruikt om diensten te ontwikkelen, wat zijn eigen voor- en nadelen heeft ten opzichte van WebAPI. Hieronder volgt een voorbeeld van een dienst ontwikkeld met MVC


Oorzaakanalyse
De fundamentele reden voor het cross-domain probleem is dat de browser lage privileges heeft op beide verzoeken en meestal alleen aanroepen naar resources in het lokale domein toestaat, tenzij de doelserver expliciet aangeeft dat cross-domain aanroepen zijn toegestaan.
Daarom wordt het cross-domain probleem veroorzaakt door het gedrag van de browser, maar de oplossing ligt aan de serverzijde. Omdat het niet mogelijk is om van alle clients te eisen dat ze de beveiliging verminderen.

oplossing
Voor zowel ASP.NET MVC- als ASP.NET Web API-projecttypes heb ik wat onderzoek gedaan en vastgesteld dat het volgende scenario haalbaar is.
Voor ASP.NET MVC hoef je alleen de volgende content aan de web.config toe te voegen


Voor ASP.NET Web API's moet naast bovenstaande instellingen een speciaal ontwerp worden toegevoegd, namelijk het toevoegen van een OPTIONS-methode voor elke API-controller, zonder dat er iets wordt teruggegeven.
publieke string Options()
{
return null; HTTP 200-antwoord met een leeg lichaam
}

Let op: deze functie kan ook worden uitgevoerd met wat onderzoek, en het kan beter zijn om het als filter te ontwerpen.





Vorig:Lenovo's officiële kanaalnotitieboek-citaat op 1 december
Volgend:Implementeer een eenvoudige HTTP-service met HttpListener
 Huisbaas| Geplaatst op 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 kopiëren


Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com