Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 21428|Svar: 1

[WebAPI] Problem och lösningar för AJAX domänöverskridande anrop till ASP.NET MVC- eller WebAPI-tjänster

[Kopiera länk]
Publicerad på 2015-12-01 15:20:20 | | | |
Problembeskrivning
När ett cross-domain-anrop ASP.NET MVC eller en tjänst skriven ASP.NET Web API blir det otillgängligt.
Fortplantningsmetoden
  • Använd en mall för att skapa ett enklaste ASP.NET Web API-projekt, felsök det för att säkerställa att det fungerar
  • Skapa ett annat projekt med bara en HTML-sida och gör ett AJAX-anrop
  • Öppna denna sida i din webbläsare så hittar du följande felmeddelande (405: Metod ej tillåten)

    Notera: Samma situation uppstår i ASP.NET trafikolycka. I vissa fall kan MVC också användas direkt för att utveckla tjänster, vilket har sina egna för- och nackdelar jämfört med WebAPI. Nedan följer ett exempel på en tjänst utvecklad med MVC


Orsaksanalys
Den grundläggande orsaken till problemet med domänöverskridande är att webbläsaren har låga privilegier på båda förfrågningarna och vanligtvis bara tillåter anrop till resurser i den lokala domänen, om inte målservern uttryckligen säger att anrop över domäner är tillåtna.
Därför, även om problemet med domänöverskridande domäner orsakas av webbläsarens beteende, ligger lösningen på serversidan. För det är inte möjligt att kräva att alla klienter minskar säkerheten.

lösning
För både ASP.NET MVC- och ASP.NET Web API-projekttyper gjorde jag lite research och kom fram till att följande scenario är genomförbart.
För ASP.NET MVC behöver du bara lägga till följande innehåll i web.config


För ASP.NET Web API:er behöver utöver ovanstående inställningar en särskild design läggas till, nämligen att lägga till en OPTIONS-metod för varje API-kontroller, men utan att returnera något.
publika strängoptioner()
{
återvända null; HTTP 200-svar med tomt innehåll
}

Observera: Denna funktion kan också göras med lite research, och det kan vara bättre att designa den som ett filter.





Föregående:Lenovos officiella kanal-notebook-citat den 1 december
Nästa:Implementera en enkel Http-tjänst med HttpListener
 Hyresvärd| Publicerad på 2015-12-01 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>
Kopiera koden


Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com