MVCWebApi跨域解决方案之一

作者: 人说狂徒富贵在青春 | 来源:发表于2017-01-24 10:19 被阅读139次

    这两天在用AngularJS配合WebAPi做项目开发,因为是分布在两个项目上面的,所以首先要解决的就是跨域问题,之前有写过一篇用AngularJS处理跨域的问题,对应的后台没有写出来,今天在这里补充一下后台的内容。
    附上AngularJS的解决方案
    下面我会列出WebApi的跨域解决方案已经所遇到的一些坑

     public class JsonCallbackAttribute : ActionFilterAttribute
        {
            private const string CallbackQueryParameter = "callback";
            public override void OnActionExecuted(HttpActionExecutedContext context)
            {
                var callback = string.Empty;
    
                if (IsJsonp(out callback))
                {
                    var jsonBuilder = new StringBuilder(callback);
                    jsonBuilder.AppendFormat("({0})", context.Response.Content.ReadAsStringAsync().Result);
                    context.Response.Content = new StringContent(jsonBuilder.ToString());
                }
                base.OnActionExecuted(context);
            }
    
            private bool IsJsonp(out string callback)
            {
                callback = HttpContext.Current.Request.QueryString[CallbackQueryParameter];
    
                return !string.IsNullOrEmpty(callback);
            }
        }
    

    在你的mvc项目里面新建一个类,类名自个随便定义啦!
    用过mvc的人应该知道,继承ActionFilterAttribute方法的作用,这里不多做解释了。
    其实这段代码已经帮你解决了跨域的问题,但是这段代码需要执行才会有作用,这里就需要对这个方法做一些配置才行。

     config.Filters.Add(new JsonCallbackAttribute());
    

    走到这里的时候,问题就来了,有的人虽然配置过了,但是运行起来一直报错,提示还有接口没有实现
    或者没有报错,但是进不了这个方法,这个问题当时我也郁闷了很久,其实很简单
    我们这个项目是一个WebApi的项目,在针对接口的配置,我们需要配置的地方不同

    4.png

    需要在WebApiConfig里面进行配置才会正确,相信很多人遇到过这个坑,在这里跟大家说一下。
    还有一个问题大家也需要注意一下,一般项目不会只有一个配置,这里大家需要注意一下先后顺序的问题

      jsonBuilder.AppendFormat("({0})", context.Response.Content.ReadAsStringAsync().Result);
    

    不然这里的代码可能会出错哦,错误提示我忘了,好像是有什么没有关闭啥的,如果有知道这个错误原理的朋友给我留个言,谢谢!
    <h2>另外祝大家2017新年快乐!万事如意

    相关文章

      网友评论

        本文标题:MVCWebApi跨域解决方案之一

        本文链接:https://www.haomeiwen.com/subject/gmjzbttx.html