4

コードに簡単なリダイレクトがあります:

public ActionResult Redirect()
{
    return Redirect("http://url.com");
}

応答の本文に次のhtmlが含まれていることに気付きました。

HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html; charset=utf-8
Location: http://url.com
Server: Microsoft-IIS/7.0
Date: Tue, 24 Jul 2012 18:53:52 GMT
Content-Length: 198

<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="http://url.com">here</a>.</h2>
</body></html>

応答本文からhtmlを削除する方法はありますか?応答本文に何も含めないことで、Content-Lengthをゼロにしたいと思います。

4

2 に答える 2

6

これを行うには、組み込みのHTMLを送信するActionResult代わりに、独自の実装を行います。RedirectResult

ただし、その必要はありません。ユーザーにはそのマークアップが表示されないはずですが、ほとんどの場合、レガシーの問題に対して提供されています。また、一部のブラウザはリダイレクトに従わないように設定できることに注意してください。本文がないと、結果がかなり役に立たなくなります。

それでも本文なしでリダイレクトが必要な場合は、この結果クラスがそれを行います。

public sealed class RedirectResultNoBody : ActionResult
{
    private readonly string location;
    public RedirectResultNoBody(string location) 
    {
        this.location = location;
    }
    public override void ExecuteResult(ControllerContext context) 
    {
        var response = context.HttpContext.Response;
        response.StatusCode = 302;
        response.RedirectLocation = location;
        response.End();
    }
}

これは、次のように使用されます。

public ActionResult Redirect()
{
    return new RedirectResultNoBody("http://url.com");
}
于 2012-07-24T20:48:06.393 に答える
1

すべてが通常どおりに機能する場合、ユーザーはこの画面を表示できません。これは、サーバーが非常にビジーであるか、クライアントマシンのリソースが大幅に不足している場合にのみ発生します。

また、リダイレクトで何かが失敗した場合、ユーザーはページをクリックできます。ですから、変更しないことをお勧めします。

それを変更することを主張する場合は、エラー302のテンプレートを提供することでうまくいくはずです。これは、ASP.NETまたはIISで実行できます。

于 2012-07-24T20:43:39.033 に答える