我们正在尝试实现一个非托管标头,该标头将接受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");