Di mana konstanta untuk nilai "HttpRequest.RequestType" dan "WebRequest.Method" dalam .NET?

93

Saya perlu memeriksa RequestTypedari sebuah HttpRequestdi ASP.NET (atau WebRequest.Method). Saya tahu bahwa saya hanya dapat menggunakan nilai string " POST" atau " GET" untuk jenis permintaan, tetapi saya dapat bersumpah ada suatu konstanta di suatu tempat di beberapa kelas di .NET yang berisi nilai.

Karena penasaran saya bertanya-tanya apakah ada yang tahu untuk kelas apa konstanta string ini GETdan POSTberada. Saya telah mencoba mencari secara online tetapi saya tidak berhasil, jadi saya pikir saya akan bertanya di sini.

Dan Herbert
sumber

Jawaban:

122
System.Net.WebRequestMethods.Http
    .Connect = "CONNECT"
    .Get = "GET"
    .Head = "HEAD"
    .MkCol = "MKCOL"
    .Post = "POST"
    .Put = "PUT"

Namun pada akhirnya; karena constekspresi dibakar ke pemanggil, ini identik dengan menggunakan "GET" dll, hanya tanpa risiko salah ketik.

Marc Gravell
sumber
22
Menarik, kenapa tidak ada metode DELETE dan "*"?
kuncevic.dev
9
Dan itu hilang OPTIONS dan TRACE.
Paul Kuykendall
7
PATCHkata kerja juga hilang.
RBT
43

Juga ada System.Net.Http.HttpMethodyang bisa berfungsi sebagai pengganti enum. Anda dapat membandingkannya aMethod == HttpMethod.Get, dll. Untuk mendapatkan panggilan nama metode string mis HttpMethod.Get.Method.

xmedeko.dll
sumber
6
Ini memiliki keuntungan untuk bekerja di Asp.Net Core juga
superjos
2
Saya hanya ingin tahu mengapa mereka belum mendeklarasikan bidang tersebut sebagai konstanta, bukan bidang hanya baca statis. Keuntungan konstanta adalah Anda dapat meneruskannya sebagai parameter default (yaitu void Request(HttpMethod method = HttpMethod.Get)).
Shimmy Weitzhandler
@Shimmy Kerugian konstanta adalah bahwa mereka dimasukkan ke dalam rakitan referensi pada waktu kompilasi melalui substitusi sederhana. Itu berarti bahwa jika assembly yang mendefinisikan konstanta mengubah nilainya dan diganti, setiap rakitan referensi akan mempertahankan nilai konstanta asli, tidak salah. Seberapa besar kemungkinan metode HTTP akan berubah, bagaimanapun, adalah cerita lain ...
Ian Kemp
1
HttpMethod.Get.MethodBUKAN merupakan konstanta waktu kompilasi :( di mana System.Net.WebRequestMethods.Httpadalah konstanta
Piotr Kula
1
Kebutuhan konstanta waktu kompilasi tidak dapat dihindari terlepas dari kelebihan atau kekurangannya. Misalnya, parameter default dalam tanda tangan metode. Ketika saya tidak dapat menggunakan System.Net.WebRequestMethods, saya biasanya mengatasinya dengan meneruskan string yang dapat digunakan HttpMethod dalam konstruktornya. Masalahnya, tentu saja, dokumentasi mereka tidak secara eksplisit mengatakan apa yang terjadi ketika nilai string yang buruk diteruskan, jadi gunakan strategi ini dengan risiko Anda sendiri, docs.microsoft.com/en-us/dotnet/api/…
Jessica Pennell
17

Di ASP.NET MVC mereka berada di System.Web.Mvc.HttpVerbs . Tetapi semua metode yang menggunakan salah satu dari nilai enum ini juga memiliki penggantian teks, karena tidak ada kumpulan lengkap kata kerja HTTP, hanya kumpulan nilai yang saat ini ditentukan (lihat di sini dan di sini dan di sini ).

Anda tidak dapat membuat enumerasi yang mencakup semua kata kerja, karena ada kemungkinan kata kerja dapat ditambahkan, dan enumerasi memiliki masalah versi yang membuat hal ini tidak praktis.


sumber
5

Di ASP.NET Core Anda akan menemukan kumpulan string metode http di kelas HttpMethods.cs di bawah Microsoft.AspNetCore.Httpnamespace.

Kelas ini juga menawarkan pembantu boolean seperti IsGet()atau IsPost()untuk semantik yang lebih baik.

Harap dicatat bahwa string ini diekspos sebagai public static readonly stringdan bukan sebagai constants.

B12Pemanggang
sumber