Dela via


Anvisningar: Välj mellan HTTP POST- och HTTP GET-begäranden för ASP.NET AJAX-slutpunkter

Med Windows Communication Foundation (WCF) kan du skapa en tjänst som exponerar en ASP.NET AJAX-aktiverad slutpunkt som kan anropas från JavaScript på en klientwebbplats. De grundläggande procedurerna för att skapa sådana tjänster beskrivs i Så här: Använd Konfiguration för att lägga till en ASP.NET AJAX-slutpunkt och Så här lägger du till en ASP.NET AJAX-slutpunkt utan att använda konfiguration.

ASP.NET AJAX stöder åtgärder som använder HTTP POST- och HTTP GET-verben, där HTTP POST är standard. När du skapar en åtgärd som inte har några biverkningar och returnerar data som sällan eller aldrig ändras använder du HTTP GET i stället. Resultatet av GET-åtgärder kan cachelagras, vilket innebär att flera anrop till samma åtgärd bara kan resultera i en begäran till din tjänst. Cachelagringen görs inte av WCF men kan ske på vilken nivå som helst (i en användares webbläsare, på en proxyserver och på andra nivåer.) Cachelagring är fördelaktigt om du vill öka tjänstens prestanda, men kanske inte är acceptabelt om data ändras ofta eller om åtgärden utför någon åtgärd.

Om du till exempel utformar tjänsten för att hantera en användares musikbibliotek kan en åtgärd som söker upp artisten baserat på ett albums titel ha nytta av att använda GET, men en åtgärd som lägger till ett album i användarens personliga samling måste använda POST.

Om du vill styra cachens livslängd använder du typen OutgoingWebResponseContext . När du till exempel utformar en tjänst som returnerar väderprognoser som uppdateras varje timme använder du GET men begränsar cachevaraktigheten till en timme eller mindre för att förhindra att användarna av tjänsten får åtkomst till inaktuella data.

När du använder tjänster från en ASP.NET AJAX-sida som använder Script Manager-kontrollen, spelar det ingen roll om åtgärden använder GET eller POST – mekanismen för skripthanteraren säkerställer att rätt typ av begäran utfärdas.

HTTP GET-åtgärder använder indataparametrar som stöds av POST-åtgärder, inklusive komplexa datakontraktstyper. I de flesta fall rekommenderar vi dock att du undviker för många parametrar eller parametrar som är för komplexa i GET-åtgärder eftersom det minskar cachelagringseffektiviteten.

Det här avsnittet visar hur du väljer mellan GET och POST genom att lägga till attributen WebGetAttribute eller WebInvokeAttribute till relevanta åtgärder i tjänstkontraktet. De andra stegen (för att implementera, konfigurera och vara värd för tjänsten) som krävs för att få igång tjänsten liknar de som används av alla ASP.NET AJAX-tjänsten i WCF.

En åtgärd som har markerats WebGetAttribute med använder alltid en GET-begäran. En åtgärd som har markerats med WebInvokeAttribute, eller som inte har markerats med något av de två attributen, använder en POST-begäran. WebInvokeAttribute Tillåter användning av andra HTTP-verb, förutom GET och POST (till exempel PUT och DELETE) via Method egenskapen . Dessa verb stöds dock inte av ASP.NET AJAX. Om du tänker använda tjänsten från ASP.NET sidor med hjälp av Script Manager-kontrollen ska du inte använda egenskapen Method .

Ett exempel på hur du växlar till GET finns i Exempel på Grundläggande AJAX-tjänst .

Ett exempel som använder POST finns i AJAX-tjänsten med HTTP POST-exempel .

Skapa en WCF-tjänst som svarar på HTTP GET- eller HTTP POST-begäranden

  1. Definiera ett grundläggande WCF-tjänstkontrakt med ett gränssnitt markerat med attributet ServiceContractAttribute . Markera varje åtgärd med OperationContractAttribute. WebGetAttribute Lägg till attributet för att ange att en åtgärd ska svara på HTTP GET-begäranden. Du kan också lägga till WebInvokeAttribute attributet för att uttryckligen ange HTTP POST, eller inte ange ett attribut, som standard är HTTP POST.

    [ServiceContract]  
    public interface IMusicService  
    {  
        //This operation uses a GET method.  
        [OperationContract]  
        [WebGet]  
        string LookUpArtist(string album);  
    
        //This operation will use a POST method.  
        [OperationContract]  
        [WebInvoke]  
        void AddAlbum(string user, string album);  
    
        //This operation will use POST method by default  
        //since nothing else is explicitly specified.  
        [OperationContract]  
        string[] GetAlbums(string user);  
    
        //Other operations omitted…  
    
    }  
    
  2. Implementera tjänstkontraktet IMusicService med en MusicService.

    public class MusicService : IMusicService  
    {  
        public void AddAlbum(string user, string album)  
        {  
            //Add implementation here.  
        }  
    
         //Other operations omitted…  
    }  
    
  3. Skapa en ny fil med namnet service med tillägget .svc i programmet. Redigera den här filen genom att lägga till lämplig information om @ServiceHost direktiv för tjänsten. Ange att WebScriptServiceHostFactory ska användas i @ServiceHost-direktivet för att automatiskt konfigurera en ASP.NET AJAX-slutpunkt.

    <%@ServiceHost
        language=c#
        Debug="true"
        Service="Microsoft.Ajax.Samples.MusicService"  
        Factory=System.ServiceModel.Activation.WebScriptServiceHostFactory  
    %>  
    

Så här anropar du tjänsten

  1. Du kan testa tjänstens GET-åtgärder utan någon klientkod med hjälp av webbläsaren. Om din tjänst till exempel har konfigurerats på http://example.com/service.svc adressen anropar inskrivning http://example.com/service.svc/LookUpArtist?album=SomeAlbum i webbläsarens adressfält tjänsten och gör att svaret laddas ned eller visas.

  2. Du kan använda tjänster med GET-åtgärder på samma sätt som andra ASP.NET AJAX-tjänster – genom att ange tjänst-URL:en i skriptsamlingen för kontrollen ASP.NET AJAX Script Manager. Ett exempel finns i Basic AJAX-tjänsten.

Se även