ค่าคงที่สำหรับค่า“ HttpRequest.RequestType” และ“ WebRequest.Method” ใน. NET อยู่ที่ไหน


93

ฉันต้องการตรวจสอบRequestTypeของHttpRequestใน ASP.NET (หรือWebRequest.Method) ฉันรู้ว่าฉันสามารถใช้ค่าสตริง " POST" หรือ " GET" สำหรับประเภทคำขอได้ แต่ฉันสามารถสาบานได้ว่ามีค่าคงที่ในบางคลาสใน. NET ที่มีค่าอยู่

ด้วยความอยากรู้อยากเห็นฉันสงสัยว่ามีใครรู้บ้างว่าค่าคงที่สตริงเหล่านี้มีไว้สำหรับGETและPOSTอยู่ในคลาสใดฉันได้ลองค้นหาทางออนไลน์แล้ว แต่ฉันไม่มีโชคเลยคิดว่าฉันจะถามที่นี่

คำตอบ:


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

ในที่สุดแม้ว่า; เนื่องจากconstนิพจน์ถูกเบิร์นไปยังผู้โทรจึงเหมือนกับการใช้ "GET" เป็นต้นโดยไม่ต้องเสี่ยงต่อการพิมพ์ผิด


22
น่าสนใจทำไมไม่มีวิธี DELETE และ "*"
kuncevic.dev

9
และไม่มี OPTIONS และ TRACE
Paul Kuykendall

7
PATCHคำกริยายังหายไป
RBT

43

ยังมีอยู่System.Net.Http.HttpMethodซึ่งสามารถให้บริการแทน enum คุณสามารถเปรียบเทียบพวกเขาaMethod == HttpMethod.Getฯลฯ HttpMethod.Get.Methodเพื่อให้ได้ชื่อวิธีสตริงโทรเช่น


6
สิ่งนี้มีประโยชน์ในการทำงานใน Asp.Net Core เช่นกัน
superjos

2
ฉันแค่สงสัยว่าทำไมพวกเขาไม่ประกาศฟิลด์เหล่านั้นเป็นค่าคงที่แทนที่จะเป็นฟิลด์แบบอ่านอย่างเดียวแบบคงที่ ข้อดีของค่าคงที่คือคุณสามารถส่งผ่านเป็นค่าเริ่มต้นของพารามิเตอร์ (เช่นvoid Request(HttpMethod method = HttpMethod.Get))
Shimmy Weitzhandler

@Shimmy ข้อเสียของค่าคงที่คือพวกมันถูกรวมเข้าในแอสเซมบลีการอ้างอิงในเวลาคอมไพล์ผ่านการแทนที่อย่างง่าย นั่นหมายความว่าหากแอสเซมบลีที่กำหนดค่าคงที่เปลี่ยนค่าและถูกแทนที่แอสเซมบลีที่อ้างอิงใด ๆ จะคงค่าคงที่เดิมไว้ไม่ผิด ความเป็นไปได้ที่วิธีการ HTTP จะเปลี่ยนไปอย่างไรก็เป็นอีกเรื่องหนึ่ง ...
Ian Kemp

1
HttpMethod.Get.Methodไม่ใช่ค่าคงที่เวลาคอมไพล์ :( ค่าคงที่System.Net.WebRequestMethods.Httpอยู่ที่ไหน
Piotr Kula

1
ความจำเป็นในการคอมไพล์ค่าคงที่เป็นสิ่งที่หลีกเลี่ยงไม่ได้โดยไม่คำนึงถึงข้อดีหรือข้อเสีย ตัวอย่างเช่นพารามิเตอร์เริ่มต้นในลายเซ็นวิธีการ เมื่อฉันไม่สามารถใช้ System.Net.WebRequestMethods ฉันมักจะแก้ไขปัญหานี้โดยการส่งสตริงที่ HttpMethod สามารถใช้ในตัวสร้างได้ แน่นอนว่าปัญหาคือเอกสารของพวกเขาไม่ได้บอกอย่างชัดเจนว่าจะเกิดอะไรขึ้นเมื่อมีการส่งค่าสตริงที่ไม่ถูกต้องดังนั้นให้ใช้กลยุทธ์นี้โดยยอมรับความเสี่ยงเองdocs.microsoft.com/en-us/dotnet/api/…
เจสสิก้า Pennell

17

ใน ASP.NET MVC พวกเขาอยู่ในSystem.Web.Mvc.HttpVerbs แต่วิธีการทั้งหมดที่ใช้หนึ่งในค่า enum เหล่านี้ยังมีการแทนที่ข้อความเนื่องจากไม่มีชุดคำกริยา HTTP ที่สมบูรณ์มีเพียงชุดของค่าที่กำหนดไว้ในปัจจุบันเท่านั้น (ดูที่นี่และที่นี่และที่นี่ )

คุณไม่สามารถสร้างการแจงนับที่ครอบคลุมคำกริยาทั้งหมดได้เนื่องจากมีความเป็นไปได้ที่สามารถเพิ่มคำกริยาได้และการแจงนับมีปัญหาในการกำหนดเวอร์ชันที่ทำให้ไม่สามารถใช้งานได้จริง


5

ในASP.NET Coreคุณจะพบชุดของสตริงเมธอด http ในคลาสHttpMethods.csภายใต้Microsoft.AspNetCore.Httpเนมสเปซ

คลาสนี้ยังมีตัวช่วยบูลีนเช่นIsGet()หรือIsPost()เพื่อความหมายที่ดีขึ้น

โปรดทราบว่าสายเหล่านี้จะถูกเปิดเผยว่าเป็นและไม่เป็นpublic static readonly stringconstants

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.