我们正在尝试实现一个非托管标头,它将接受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."}
我在这里遗漏了什么或逻辑不完整吗?
答案 0 :(得分:2)
尝试RedirectResult
filterContext.Result = new RedirectResult("https://website.com");
答案 1 :(得分:1)
在HTTP中,每个请求始终有单个响应。因此,此错误意味着您已经发送了一些内容进行回复,并再次请求其他网址。