4

我们正在尝试实现一个非托管标头,它可以*.website.com在 ASP.NET 中接受之前的任何内容。由于它将接受任何子域,我们扩展了 HttpContextBase 类以添加自定义方法。

public static bool ValidateHost(this HttpContextBase context)
{
    var domain = context.Request.Url.Host;

    //add logic to check if the host is valid and the subdomain exist in the database

    return false;
}

此方法将验证context.Url.Host数据库中是否存在有效主机或其子域,如果不存在则将请求重定向到默认主机website.com。为此,我在下面添加了这行代码BaseController

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    if (!filterContext.HttpContext.ValidateUrl())
    {
        filterContext.HttpContext.Response.Redirect("https://website.com/");
        return;
    }
}

每当它返回时,它都会重定向到默认主机false,但是它会引发异常:{"Server cannot append header after HTTP headers have been sent."}

我在这里遗漏了什么还是逻辑不完整?

4

2 回答 2

3

尝试重定向结果

filterContext.Result = new RedirectResult("https://website.com");
于 2016-04-19T06:17:37.593 回答
1

在 HTTP 中,每个请求总是有一个响应。所以这个错误意味着你已经发送了一些东西来响应,并且你再次请求其他 URL。

于 2016-04-19T06:19:12.417 回答