web-dev-qa-db-ja.com

ASP.NETMVCを使用してHTTP HEADリクエストに応答する

ボットがHEADを使用してASP.NETMVCサイトにアクセスしたときのHTTP HEADリクエストを正しくサポートしたいのですが、すべてのHTTP HEAD =サイトへのリクエストは、特に http://downforeveryoneorjustme.com から404を返していました。これは本当に迷惑です。他のすべての優れたボットと同じようにGETに切り替えてほしいと思います。

[AcceptVerbs(HttpVerbs.Get)][AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)]に変更しただけの場合、MVCはリクエストの本文を削除することを認識しますか?

HTTP HEADリクエストをサポートするために何をしましたか?(コードサンプルは素晴らしいでしょう!)

38
DavGarcia

ASP.Net MVC2プロジェクトで簡単なアクションメソッドを作成しました。

public class HomeController : Controller
{
    public ActionResult TestMe()
    {
        return View();
    }
}

次に、Fiddlerを起動し、HTTP GETリクエストを作成してこのURLにアクセスしました。

http://localhost.:51149/Home/TestMe

期待されたフルページコンテンツが返されました。

次に、HTTP GETの代わりにHTTP HEADを使用するようにリクエストを変更しました-)。期待される頭の情報だけを受け取り、生の出力には体の情報はありませんでした。

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Wed, 07 Jul 2010 16:58:55 GMT
X-AspNet-Version: 4.0.30319
X-AspNetMvc-Version: 2.0
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 1120
Connection: Close

私の推測では、HTTP GET動詞にのみ応答するように、アクションメソッドに制約を含めています。このようなことをすると、[〜#〜] get [〜#〜]の両方で機能します)[〜#〜] head [〜#〜]、または値が提供されない場合は制約を完全に省略できます。

public class HomeController : Controller
{
    [AcceptVerbs(new[] {"GET", "HEAD"})]
    public ActionResult TestMe()
    {
        return View();
    }
}
54
a7drew

以下を行うだけで結果を得ることができます

[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)]
public ActionResult TestMe() =>View();
27
user2101889