Aktivieren Sie den ASP.NET ASMX-Webdienst für HTTP-POST / GET-Anforderungen

70

Ich möchte einen ASP.NET Classic (ASMX) Webdienst für HTTP POST- und GET-Anforderungen aktivieren. Mir ist klar, dass dies auf Maschinen- oder Anwendungsebene durch Hinzufügen von ...

<webServices>
    <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
    </protocols>
</webServices>

.. zur machine.config oder web.config. Meine Frage ist, ob HTTP-POST- und GET-Anforderungen pro Webdienst oder Webmethodenebene und nicht pro Anwendung oder Computer aktiviert werden können.

Mein Webdienst wird mit net 3.5sp1 in c # geschrieben.

Dean Bates
quelle

Antworten:

52

Versuchen Sie, UseHttpGet über Ihre Methode zu deklarieren.

[ScriptMethod(UseHttpGet = true)]
public string HelloWorld()
{
    return "Hello World";
}
Tanathos
quelle
1
Wie wäre es, wenn Sie es für alle Methoden in einem bestimmten Service aktivieren, ohne das Attribut für jeden zu setzen?
JohnIdol
Entschuldigung, aber es scheint, dass es keine Option gibt, dies zu tun
Tanathos
Ich denke, Sie können die Klasse dekorieren. Ich bin mir nicht sicher, ob
Bart Calixto
2
Hallo, wie werden Parameter an diese Methode übergeben?
Nitin S
44

Eigentlich habe ich einen etwas eigenartigen Weg gefunden, dies zu tun. Fügen Sie das Protokoll Ihrer web.config hinzu, jedoch innerhalb eines Standortelements. Geben Sie den Webservice-Speicherort wie folgt als Pfadattribut an:

<location path="YourWebservice.asmx">
  <system.web>
    <webServices>
      <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
      </protocols>
    </webServices>
  </system.web>
</location>
BLΞND OnLine
quelle
Nur brauchen Sie das locationTeil nicht. system.weblebt direkt im <configuration>Hauptknoten.
Vapcguy
2
@vapcguy Das hängt davon ab, was Sie erreichen wollen. Wenn Sie mehrere Dienste haben, aber nur einer unterstützt werden muss GET, ist dies nur für den einen möglich. Wenn es Ihnen egal ist, ob es für alle gilt, dann können Sie es einfach in den allgemeinen system.webAbschnitt
einfügen
@ahwm Wenn wir die HttpPost-Methode verwenden möchten, müssen wir sie als [ScriptMethod(UseHttpGet = false)]Richtig schreiben ?
Naman Upadhyay
@NamanUpadhyay Besser nur verwenden [HttpGet]und [HttpPost]Tags im Code- Behind . Aber ich denke, Sie verpassen seinen Standpunkt - diese Tags haben damit zu tun, ob Sie Daten irgendwo abrufen oder veröffentlichen. Er erlaubt mehrere Speicherorte, an denen Daten in der web.config abgerufen / veröffentlicht werden können. Ich hatte nur einen Datenpunkt, daher fand ich ihn unnötig, aber sein Kommentar / seine Antwort ist genau für seine Bedürfnisse und vielleicht auch für andere, wenn sie mehrere haben. Das Vorhandensein mehrerer Standorte hat nichts mit dem Tag zu tun, das Sie in Ihrem CodeBehind verwenden. Dies hängt ausschließlich davon ab, ob Sie Daten abrufen / senden (veröffentlichen).
Vapcguy