41

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

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

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

4

2 に答える 2

57

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

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

次に、Fiddlerを起動し、次のURLにアクセスするためのHTTPGETリクエストを作成しました。

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

予想される全ページのコンテンツが返されました。

次に、HTTPGETの代わりにHTTPHEADを使用するようにリクエストを変更まし。予想される頭の情報だけを受け取り、生の出力には体の情報はありませんでした。

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動詞にのみ応答するように、アクションメソッドに制約を含めていると思います。このようなことを行うと、GETHEADの両方で機能します。または、値が提供されない場合は、制約を完全に省略できます。

public class HomeController : Controller
{
    [AcceptVerbs(new[] {"GET", "HEAD"})]
    public ActionResult TestMe()
    {
        return View();
    }
}
于 2010-07-07T17:06:17.637 に答える
29

次のようにするだけで結果を得ることができます

[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Head)]
public ActionResult TestMe() =>View();
于 2013-02-23T08:11:35.067 に答える