Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 21428|Antwort: 1

[WebAPI] Probleme und Lösungen für AJAX-Domänenübergreifende Aufrufe zu ASP.NET MVC- oder WebAPI-Dienste

[Link kopieren]
Veröffentlicht am 01.12.2015 15:20:20 | | | |
Problembeschreibung
Wenn ein domänenübergreifender Aufruf MVC ASP.NET oder ein Dienst ASP.NET Web-API geschrieben wird, wird er unzugänglich.
Fortpflanzungsmethode
  • Verwenden Sie eine Vorlage, um ein einfachstes ASP.NET Web-API-Projekt zu erstellen, debuggen Sie es, um sicherzustellen, dass es funktioniert
  • Erstelle ein weiteres Projekt mit nur einer HTML-Seite und mache einen AJAX-Aufruf
  • Öffnen Sie diese Seite in Ihrem Browser und Sie finden folgenden Fehler (405: Methode nicht erlaubt)

    Hinweis: Die gleiche Situation tritt bei ASP.NET MVC auf. In einigen Fällen kann MVC auch direkt zur Entwicklung von Diensten verwendet werden, was im Vergleich zu WebAPI eigene Vor- und Nachteile hat. Nachfolgend ist ein Beispiel für einen Dienst, der mit MVC entwickelt wurde


Ursachenanalyse
Der grundlegende Grund für das domänenübergreifende Problem ist, dass der Browser bei beiden Anfragen niedrige Rechte hat und in der Regel nur Aufrufe von Ressourcen in der lokalen Domäne erlaubt, es sei denn, der Zielserver teilt ihm ausdrücklich mit, dass domänenübergreifende Aufrufe erlaubt sind.
Daher liegt das domänenübergreifende Problem zwar durch das Verhalten des Browsers, die Lösung liegt jedoch auf der Serverseite. Weil es nicht möglich ist, von allen Clients zu verlangen, die Sicherheit zu verringern.

Lösung
Sowohl für ASP.NET MVC- als auch ASP.NET Web-API-Projekttypen habe ich recherchiert und festgestellt, dass folgendes Szenario machbar ist.
Für ASP.NET MVC musst du nur den folgenden Inhalt zur web.config hinzufügen


Für ASP.NET Web-APIs muss zusätzlich zu den oben genannten Einstellungen ein spezielles Design hinzugefügt werden, nämlich für jeden API-Controller eine OPTIONS-Methode hinzuzufügen, ohne jedoch etwas zurückzugeben.
öffentliche String-Optionen()
{
Null zurück; HTTP-200-Antwort mit leerem Körper
}

Hinweis: Diese Funktion kann auch mit etwas Recherche durchgeführt werden, und es ist vielleicht besser, sie als Filter zu entwerfen.





Vorhergehend:Lenovos offizielles Channel-Notizbuch-Zitat am 1. Dezember
Nächster:Implementiere einen einfachen HTTP-Dienst mit HttpListener
 Vermieter| Veröffentlicht am 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 kopieren


Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com