最近做了一个前后端分离的项目,后台用的.NET MVC写的接口,前台用的VUE。出现了一个问题,就是在后台获取Header Token的时候,怎么也获取不到,后来发现VUE前端在请求的时候,先发送了一个OPTIONS请求,也就是大家说的预请求,这个请求是获取不到Header里边的内容,如果OPTIONS请求不能正常处理,那么后边真正的POST的请求也不会再进行,所以只有这个OPTIONS请求通过之后,才能处理真正的POST请求,但是OPTIONS请求和POST请求,都是访问的同一个接口地址,怎么区分处理呢?目前我是在OnActionExecuting方法里做的处理。
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
//对OPTIONS请求做处理
if (Request.HttpMethod == "OPTIONS")
{
JsonResult jsResult = new JsonResult();
filterContext.HttpContext.Response.AddHeader("Access-Control-Allow-Headers", "token");
filterContext.Result = jsResult;
}
else
{
//其他正常处理代码
}
}
在处理的时候加了一个"Access-Control-Allow-Headers",“token”,如果OPTIONS请求没有返回这个自定义Header内容,那么预请求的结果就是不允许传自定义Header,那么后边的POST请求也不会拿到数据,所以加了一个这个东西。
目前我是这么想也是这么处理的,欢迎讨论指正。