.NETの「HttpRequest.RequestType」および「WebRequest.Method」値の定数はどこにありますか?


92

私がチェックする必要があるRequestTypeのをHttpRequestASP.NET(またはでWebRequest.Method)。リクエストタイプに文字列値 " POST"または " GET"を使用できることは知っていますが、.NETのクラスのどこかに値を含む定数があることを誓った可能性があります。

好奇心から、誰がどのようなクラスは、これらの文字列定数のために知っていた場合、私は思っていたGETPOSTしていたオンラインで検索、私が試してみた。しかし、私は、私はここにお願いしたいと思ったので、私は、運がなかったしました。

回答:


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

しかし、最終的には; const式は呼び出し元に焼き付けられるため、これは「GET」などを使用するのと同じですが、タイプミスのリスクはありません。


22
興味深いことに、なぜDELETEメソッドと「*」がないのですか?
kuncevic.dev 2011

9
そして、OPTIONSとTRACEがありません。
Paul Kuykendall 2012年

7
PATCH動詞もありません。
RBT 2017年

42

System.Net.Http.HttpMethod列挙型の代わりに機能できるものも存在します。それらを比較することができますaMethod == HttpMethod.Get。文字列メソッド名を取得するには、たとえばを呼び出しますHttpMethod.Get.Method


6
これには、Asp.Net Coreでも機能するという利点があります
2016年

2
なぜ静的な読み取り専用フィールドではなく定数としてこれらのフィールドを宣言していないのか疑問に思っています。定数の利点は、それらをパラメーターのデフォルトとして渡すことができることです(つまりvoid Request(HttpMethod method = HttpMethod.Get))。
シミーワイツハンドラー2017

@Shimmy定数の欠点は、コンパイル時に単純な置換によって参照アセンブリに組み込まれることです。つまり、定数を定義するアセンブリが値を変更して置き換えられた場合、参照するアセンブリは元の、間違っていない定数値を保持します。どのように可能性が高いそれは方法がこれまでに変更されるHTTP、しかし、また別の話が...あるということです
イアン・ケンプ

1
HttpMethod.Get.Methodはコンパイル時定数ではありません:(ここSystem.Net.WebRequestMethods.Httpで定数は
Piotr Kula 2017

1
コンパイル時定数の必要性は、それらの長所または短所に関係なく避けられません。たとえば、メソッドシグネチャのデフォルトパラメータ。System.Net.WebRequestMethodsを使用できない場合は、通常、HttpMethodがコンストラクターで使用できる文字列を渡すことでこれを回避します。問題は、もちろん、彼らのドキュメントには、悪い文字列値が渡されたときに何が起こるかが明示されていないため、自己責任でこの戦略を使用してください、docs.microsoft.com / en
Jessicaペネル

17

ASP.NET MVCでは、それらはSystem.Web.Mvc.HttpVerbsにあります。ただし、HTTP動詞の完全なセットはなく、現在定義されている値のセットのみであるため、これらの列挙値の1つを受け取るすべてのメソッドにもテキストオーバーライドがあります(ここここここを参照)。

動詞が追加される可能性があるため、すべての動詞をカバーする列挙型を作成することはできません。列挙型にはバージョン管理の問題があり、これは実用的ではありません。


5

ASP.NET Coreでは、名前空間の下のHttpMethods.csクラスにhttpメソッド文字列のコレクションがありMicrosoft.AspNetCore.Httpます。

このクラスは、IsGet()またはIsPost()より良いセマンティクスのためのブールヘルパーも提供します。

これらの文字列はとして公開されpublic static readonly string、として公開されないことに注意してくださいconstants

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.