OnActionExecuting方法

时间:2016-04-19 06:07:04

标签: c# asp.net-mvc redirect httpcontext onactionexecuting

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

我在这里遗漏了什么或逻辑不完整吗?

2 个答案:

答案 0 :(得分:2)

尝试RedirectResult

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

答案 1 :(得分:1)

在HTTP中,每个请求始终有单个响应。因此,此错误意味着您已经发送了一些内容进行回复,并再次请求其他网址。