Url OnActionExecuting 方法重定向

Url redirection on OnActionExecuting method

我们正在尝试实现一个 non-hosted header,它将接受 ASP.NET 中 *.website.com 之前的任何内容。由于它将接受任何子域,我们扩展了 HttpContextBase class 以添加自定义方法。

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;
    }
}

它会在 returns false 时重定向到默认主机,但会抛出异常:{"Server cannot append header after HTTP headers have been sent."}

我是不是遗漏了什么或者逻辑不完整?

试试 RedirectResult

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

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