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

你可以通过实现你自己的ActionResult而不是使用内置的来做到这一点RedirectResult,它将发送该 HTML。

但是,您不应该需要 - 用户永远不会看到该标记,但它主要是为遗留问题提供的。另请注意,某些浏览器可以设置为不遵循重定向 - 没有正文会导致结果非常无用。

如果你仍然想要一个没有正文的重定向,这个结果类会这样做:

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 回答