MVC重定向出错:在发送HTTP标头后,服务器无法附加标头

时间:2014-04-25 04:44:45

标签: asp.net-mvc https http-headers

我想在用户首次加载网站时进行简单的重定向。 为此,我只是在BaseController的BeginExecuteCore()方法上访问RouteData,如果URL没有特定值,那么我将重定向到另一个https route

  public class BaseController : Controller
  {
        protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state)
        {
            // access route data

            if (condition == true)
               Response.Redirect(string.Format("https://{0}/en/en", Request.Url.Authority), true);
            }
        }
  }

一些事实:

  1. 我达到了我想要的结果
  2. 我收到异常"在发送HTTP标头后,服务器无法追加标头。"
  3. 我尝试过多种方法:使用其他方法进行重定向,例如Initialize(RequestContext requestContext)
  4. 我尝试在Redirect方法
  5. 上使用参数EndResponse=true
  6. 我尝试在执行重定向之前清除标题
  7. 在之前的所有实验中,我都遇到了同样的例外
  8. 我正在使用MVC 5
  9. 我的问题是: 如何以最有效的方式将用户重定向到另一条路线,因为我知道我需要访问RouteData并且不会抛出恼人的异常?

    谢谢!

2 个答案:

答案 0 :(得分:0)

我不喜欢使用BeginExecuteCore()方法,因为我还在使用mvc 3和4。

在mvc 4中,我会使用动作过滤器在页面加载之前检查一些内容。

您看到该错误的原因可能是因为您要在页面已加载时重定向用户。

 public class LogActionFilter : ActionFilterAttribute
   {
          public override void OnActionExecuting(ActionExecutingContext filterContext)
          {
                if (condition == true)
               filterContext.Response.Redirect(string.Format("https://{0}/en/en", Request.Url.Authority), true);
          }     
     }

看看:http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/understanding-action-filters-cs

答案 1 :(得分:0)

Response.Redirect(anyUrl)导致302状态代码 Html.AntiForgeryToken()通常与302状态代码冲突。

您可以将以下代码放在Application_Start

AntiForgeryConfig.SuppressXFrameOptionsHeader = true;
  

安全警告:SuppressXFrameOptionsHeader =true会阻止您   网站被加载到iframe。

read more