Hằng số cho các giá trị “HttpRequest.RequestType” và “WebRequest.Method” trong .NET ở đâu?


92

Tôi cần kiểm tra RequestTypemột HttpRequesttrong ASP.NET (hoặc WebRequest.Method). Tôi biết rằng tôi chỉ có thể sử dụng các giá trị chuỗi " POST" hoặc " GET" cho loại yêu cầu, nhưng tôi có thể thề rằng có một hằng số ở đâu đó trong một số lớp trong .NET có chứa các giá trị.

Vì tò mò, tôi đã tự hỏi liệu có ai biết những hằng số chuỗi này dùng cho GETvà POSTnằm trong lớp nào không. Tôi đã thử tìm kiếm trên mạng nhưng không gặp may, vì vậy tôi nghĩ tôi nên hỏi ở đây.

Câu trả lời:


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

Cuối cùng, mặc dù; vì các constbiểu thức được ghi vào trình gọi, điều này giống với việc sử dụng "GET", v.v., chỉ không có rủi ro về lỗi đánh máy.


22
Thật thú vị, tại sao không có phương thức DELETE và "*"?
— kuncevic.dev

9
Và nó thiếu OPTIONS và TRACE.
— Paul Kuykendall

7
PATCHđộng từ cũng bị thiếu.
— RBT

42

Cũng tồn tại System.Net.Http.HttpMethodcó thể phân phát thay vì enum. Bạn có thể so sánh chúng aMethod == HttpMethod.Get, v.v. Để lấy tên phương thức chuỗi, ví dụ HttpMethod.Get.Method.


6
Điều này có lợi thế để làm việc trong Asp.Net lõi cũng
— superjos

2
Tôi chỉ tự hỏi tại sao họ không khai báo các trường đó dưới dạng hằng số thay vì các trường chỉ đọc tĩnh. Ưu điểm của hằng là bạn có thể chuyển chúng dưới dạng tham số mặc định (tức là void Request(HttpMethod method = HttpMethod.Get)).
— Shimmy Weitzhandler

@Shimmy Nhược điểm của các hằng là chúng được đưa vào hợp ngữ tham chiếu tại thời điểm biên dịch thông qua thay thế đơn giản. Điều đó có nghĩa là nếu hợp ngữ xác định các hằng số thay đổi giá trị của chúng và được thay thế, thì mọi hợp ngữ tham chiếu sẽ giữ nguyên giá trị hằng số ban đầu, không sai. Làm thế nào khả năng nó là HTTP phương pháp bao giờ sẽ thay đổi, tuy nhiên, là một câu chuyện khác ...
— Ian Kemp

1
HttpMethod.Get.MethodKHÔNG phải là một biên dịch hằng số thời gian :( nơi System.Net.WebRequestMethods.Httplà hằng số
— Piotr Kula

1
Sự cần thiết của các hằng số thời gian biên dịch là không thể tránh khỏi bất kể ưu điểm hay nhược điểm của chúng. Ví dụ, các tham số mặc định trong một chữ ký phương thức. Khi tôi không thể sử dụng System.Net.WebRequestMethods, tôi thường giải quyết vấn đề này bằng cách chuyển các chuỗi mà HttpMethod có thể sử dụng trong hàm tạo của nó. Tất nhiên, rắc rối là tài liệu của họ không nói rõ điều gì sẽ xảy ra khi một giá trị chuỗi không hợp lệ được chuyển vào, vì vậy hãy sử dụng chiến lược này và tự chịu rủi ro, docs.microsoft.com/en-us/dotnet/api/…
— Jessica Pennell

17

Trong ASP.NET MVC, chúng ở trong System.Web.Mvc.HttpVerbs . Nhưng tất cả các phương thức nhận một trong các giá trị enum này cũng có ghi đè văn bản, vì không có tập hợp động từ HTTP hoàn chỉnh, chỉ có tập hợp các giá trị hiện được xác định (xem tại đây và đây và đây ).

Bạn không thể tạo một bảng liệt kê bao gồm tất cả các động từ, vì có khả năng các động từ có thể được thêm vào và các bảng liệt kê có các vấn đề về phiên bản khiến điều này không thực tế.


5

Trong ASP.NET Core, bạn sẽ tìm thấy một tập hợp các chuỗi phương thức http trong lớp HttpMethods.cs trong Microsoft.AspNetCore.Httpkhông gian tên.

Lớp này cũng cung cấp các trình trợ giúp boolean như IsGet()hoặc IsPost()để có ngữ nghĩa tốt hơn.

Xin lưu ý rằng các chuỗi này được hiển thị dưới dạng public static readonly stringvà không như constants.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.