在Response.Redirect上删除正文中的Object Moved HTML

Tho*_*mas 4 .net c# asp.net asp.net-mvc

我的代码中有一个简单的重定向:

public ActionResult Redirect()
{
    return Redirect("http://url.com");
}
Run Code Online (Sandbox Code Playgroud)

我注意到响应包括响应正文中的以下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>
Run Code Online (Sandbox Code Playgroud)

有没有办法从响应正文中删除html?我希望Content-Length在响应主体中没有任何内容时为零.

dri*_*iis 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将使用这样:

public ActionResult Redirect()
{
    return new RedirectResultNoBody("http://url.com");
}
Run Code Online (Sandbox Code Playgroud)