我们正在尝试实现一个非托管标头,该标头将接受ASP.NET中*.website.com之前的所有内容。由于它将接受任何子域,因此我们扩展了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."}

我在这里缺少什么还是逻辑不完整吗?

最佳答案

尝试RedirectResult

filterContext.Result = new RedirectResult("https://website.com");

10-08 15:36