Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 21428|Yanıt: 1

[WebAPI] AJAX'ın ASP.NET MVC veya WebAPI hizmetlerine çapraz alan çağrıları için sorunlar ve çözümler

[Bağlantıyı kopyala]
Yayınlandı 1.12.2015 15:20:20 | | | |
Problem açıklaması
Çapraz alan araması MVC veya Web API ASP.NET yazılmış bir servis ASP.NET olduğunda, erişilemez hale gelir.
Üreme yöntemi
  • En basit ASP.NET Web API projesini oluşturmak için bir şablon kullanın, çalıştığından emin olmak için hata ayıklayın
  • Sadece bir HTML sayfası olan başka bir proje oluşturun ve bir AJAX çağrısı yapın
  • Bu sayfayı tarayıcınızda açın ve aşağıdaki hatayı göreceksiniz (405: Yöntem Kabul Edilmez)

    Not: Aynı durum ASP.NET MVC'de de yaşanır. Bazı durumlarda, MVC doğrudan hizmet geliştirmek için de kullanılabilir; bunun WebAPI'ye kıyasla kendi avantajları ve dezavantajları vardır. Aşağıda MVC kullanılarak geliştirilen bir hizmete örnek verilmektedir


Neden analizi
Alanlar arası sorunun temel nedeni, tarayıcının her iki isteğe de düşük ayrıcalıklara sahip olması ve genellikle sadece yerel alan alanındaki kaynaklara çağrılara izin vermesidir; hedef sunucu ona çapraz alan çağrılarının izin verildiğini açıkça belirtmedikçe.
Bu nedenle, alanlar arası sorun tarayıcının davranışından kaynaklansa da, çözüm sunucu tarafındadır. Çünkü tüm müşterilerin güvenliği azaltmasını zorunlu kılmak mümkün değildir.

çözüm
Hem ASP.NET MVC hem de ASP.NET Web API proje türleri için biraz araştırma yaptım ve aşağıdaki senaryonun mümkün olduğunu belirledim.
ASP.NET MVC için, sadece web.config sayfasına aşağıdaki içeriği eklemeniz yeterlidir


ASP.NET Web API'leri için, yukarıdaki ayarlara ek olarak, her API Denetleyicisi için bir OPTIONS yöntemi eklemek ama hiçbir şey geri dönmeden özel bir tasarım eklenmelidir.
public string Options()
{
return null; HTTP 200 yanıtı boş gövdeyle
}

Not: Bu fonksiyon biraz araştırma ile de yapılabilir ve onu bir filtre olarak tasarlamak daha iyi olabilir.





Önceki:Lenovo'nun 1 Aralık'taki resmi kanal not defteri alıntısı
Önümüzdeki:Basit bir Http hizmeti HttpListener ile uygulayın
 Ev sahibi| Yayınlandı 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>
Kopya kodu


Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com