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.
我们正在尝试实现一个 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.