1. 程式人生 > >C# ABP 允許跨域請求

C# ABP 允許跨域請求

首先配置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)

這樣,登入也支援跨域了。