• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#ABP允许跨域请求

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

备注:无论有没有安装 apb zero模块,都可以使用本文的跨域

 

首先配置Web Api:

1. 在Web API项目下,安装包

Install-Package Microsoft.AspNet.WebApi.Cors

2. 然后在 WebApiModule 的方法Initialize中,添加下面代码:(代码最好在ConfigureSwaggerUi的上面)

//设置跨域
            var cors = new EnableCorsAttribute("*", "*", "*");
            cors.SupportsCredentials = true;
            GlobalConfiguration.Configuration.EnableCors(cors);

 

上面配置了Web Api的跨域,然后我们想要在Web MVC中也支持跨域。下面我们给出登录模块支持跨域的例子。

 

然后配置Web MVC项目,让登录支持跨域:

1.我们创建一个Attribute类,叫做AcceessOriginalAttribute,如下:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MagicQCes.Web.Filters
{
    public class AcceessOriginalAttribute : ActionFilterAttribute, IExceptionFilter
    {public void InternalExuteAccessControle(HttpResponseBase response, HttpRequestBase request)
        {
            var header = response.Headers;
            var requestHeader = request.Headers;
            header.Set("Access-Control-Allow-Origin", requestHeader["Origin"] ?? "http://" + requestHeader["Host"]);
            header.Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
            header.Set("Access-Control-Max-Age", "3600");
            header.Set("Access-Control-Allow-Headers", "*");
            header.Set("Access-Control-Allow-Credentials", "true");
        }
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);
        }

        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            InternalExuteAccessControle(filterContext.HttpContext.Response, filterContext.HttpContext.Request);
            base.OnActionExecuted(filterContext);
        }

        public override void OnResultExecuting(ResultExecutingContext filterContext)
        {
            base.OnResultExecuting(filterContext);
        }

        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            base.OnResultExecuted(filterContext);
        }

        public void OnException(ExceptionContext filterContext)
        {
            filterContext.Result = new JsonResult()
            {
                Data = new { Succeed = 0, Message = filterContext.Exception.Message },
                JsonRequestBehavior = JsonRequestBehavior.AllowGet
            };
            filterContext.ExceptionHandled = true;
        }
    }
}

 

2.然后,我们在AccountController中,的Login方法中,添加上面属性,如下:

        [AcceessOriginal]
        public async Task<JsonResult> Login(string usernameOrEmailAddress, string Password)

 

这样,登录也支持跨域了。

 

 

可以关注本人的公众号,多年经验的原创文章共享给大家。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C# Global定时执行Global文件aTimer处理发布时间:2022-07-14
下一篇:
Effective C# Item 8: Ensure That 0 Is a Valid State for Value Types发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap