ASPNETCOREAPI 跨域处理 SQL 语句拼接 多条件分页查询 ASPNET CORE 核心 通过依赖注入(注入服务)

ASPNETCOREAPI 跨域处理

AspNetCoreApi 跨域处理

如果咱们有处理过MV5 跨域问题这个问题也不大。

(1)为什么会出现跨域问题:

 浏览器安全限制了前端脚本跨站点的访问资源,所以在调用WebApi 接口时不能成功访问资源,原因“同源策略”的存在

同源指以下几点相同

(1) IP地址/域名

(2) 端口号

(3) 网络协议)

以上三点相同即为同源,浏览器将不做限制。

(同源)   WebFrom 前台Ajax调用后台PageLoad页时 因为是在同一站点,以上三点均满足,也就不会出现跨域的问题。

(不同源) 比如用微服务开发时,前台和微服务没有在同一台服务器上,虽然端口相同IP不同协议也相同,这时就会出现了跨域的问题了。

引用脚本时会有例外:

(2)文章以AspNetCore Api 为例

2.1:首先创建一个CoreAPI的项目(这个就不多说了)

2.2:确保项目NuGet中引用 AspNetCore.ALL 里面包含 AspNetCore.Cors

ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)

如果没有右击项目依赖项代开NuGet管理工具

如图所示查找:

ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)

2.3:在Startup.cs 文件的ConfigureServices方法中注入如下代码:

(1)第一种

services.AddCors(options => options.AddPolicy("Domain",
            builder => builder.WithOrigins("http://a.example.com", "http://c.example.com").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));

"http://a.example.com", "http://c.example.com" 代表着允许访问的域,就好像给这个域开放了一个权限,允许访问的权限,可以写多个逗号分隔

(2)第二种

  services.AddCors(options => options.AddPolicy("Domain",
            builder => builder.AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));

//AllowAnyMethod允许跨域策略允许所有的方法:GET/POST/PUT/DELETE 等方法  如果进行限制需要 AllowAnyMethod("GET","POST") 这样来进行访问方法的限制
            //AllowAnyHeader允许任何的Header头部标题    有关头部标题如果不设置就不会进行限制
            //AllowAnyOrigin 允许任何来源
            //AllowCredentials 设置凭据来源

这里是重点不多说了:F12 查看源 阅读注释就明白了。

ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)

在项目中可以写 多个services.AddCors() 需要注意的是 Domain1 的区别 咱们可以针对不同的限制些不同的 限制规则

ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)
services.AddCors(options => options.AddPolicy("Domain1",
            builder => builder.WithOrigins("http://a.example.com", "http://c.example.com").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));

services.AddCors(options => options.AddPolicy("Domain2",
            builder => builder.WithOrigins("http://a.example.com", "http://c.example.com").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));

services.AddCors(options => options.AddPolicy("Domain3",
            builder => builder.WithOrigins("http://a.example.com", "http://c.example.com").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));

services.AddCors(options => options.AddPolicy("Domain4",
            builder => builder.WithOrigins("http://a.example.com", "http://c.example.com").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));
ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)

为什么做这么多限制呢:其实大家每个请求都包含了很多内容:

比如:通过 抓包工具看到的每条请求所包含的请求信息

ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)

再比如:我们通过HTTP发送请求时进行的设置:下图举例还可以设置更多的设置,这些设置都可以通过

services.AddCors()来进行设置:

ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)

2.4:在Startup.cs 文件中的Configure()方法中注册我们的   Domain

ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)
 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            app.UseCors("Domain1");
            app.UseCors("Domain2");
            app.UseCors("Domain3");
            app.UseCors("Domain4");
        }
ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)

上面操作完之后我们就结束了准备任务现在可以进行使用了:使用方法如下:
                        2.5:使用如下:
                       (1)第一种  action

ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)
       [HttpGet("{OrderNO}/{BranchID}")]
        //启用跨域
        [EnableCors("Domain")]
        public Object getMultipleOrderDetail(string OrderNO, int OrderNoType, string BranchID)
        {
            return vM.getMultipleOrderDetail(OrderNO, OrderNoType, BranchID);
        }
ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)

(2)第二种  控制器

 //启用跨域
    [EnableCors("Domain")]
    [Produces("application/json")]
    [Route("api/BorrowOrder/[action]")]
    public class SP_PartsBorrowOrderController : Controller
    {

2.6 :前台调用代码如下:

重点是:这个节点    xhrFields: { withCredentials:true //跨域请求中带cookie },//必须有这项的配置,不然cookie无法发送至服务端

ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)
 <div>
        <input id="login" value="跨域请求" type="button" />
    </div>
    <script>
        $("#login").click(function () {
            debugger
            $.ajax({
                type: 'POST',
                url: "http://localhost:54606/api/BorrowSignDetail/BorrowSignOperate",
                data: JSON.stringify([
  {
      "InputItemID": "111",
      "PartBarCode": "11",
      "PartNO": "11",
      "Counts": "11"
  }
                ])
                    ,
                contentType: 'application/json',
                dataType: "json",
                xhrFields: {
                    withCredentials: true
                },
                success: function (result) {
                    alert(result)
                }
            });
        })
    </script>
ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)

本文是以 CORS 进行实现

转载请注明出处谢谢!

VS 2017 发布:由于构建错误,发布失败

用17写AspNetCore 也一年了,最近出现了这个问题 :

在点击发布的时候 报错了,构建失败的问题,刚开始还排查日子,删除以往的发布遗留痕迹,后来发现不行,

但是项目在本地运行的时候是好使的,生成也不会报错。

我们项目中有3个解决方案,只有其中一个可以进行发布,我就对项目的(共同引用)进行查看。

这是错误信息:

ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)

解决方法:我以前用的是2.0.0版本的,可能在项目中新建的解决方案我引用的是2.0.3的,导致另外两个解决方案发布不了。总之我跟新了 引用包就OK了

ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)

SQL 语句拼接 多条件分页查询

ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)
  Create PROCEDURE [dbo].[Proc_B2B_GetBatchMainPaging]
  @StationNo AS varchar(50) , --m
  @StationName AS varchar(50) , --m
  @PartNo AS varchar(50) ,   -- son
  @PartName AS varchar(200) , --son
  @IsOldPart AS varchar(1) , --m
  @IsRebate AS varchar(1) , --m
  @IsTransport AS varchar(1) , --m
  @startApplyTime AS varchar(200) ,   --m
  @endApplyTime AS  varchar(200) , --m
  @startExpectDate AS varchar(200),  --m
  @endExpectDate AS varchar(200) , --m
  @page AS int , --
  @size AS int  --
 -- B2B_BatchPartMain as m
 -- B2B_BatchApprovalDetail as D
 -- B2B_BatchSendPartInfo as s
 -- B2B_BatchPartsInfo as son
AS
BEGIN

CREATE TABLE #ReturnTable (
[PartNo] varchar(20) NULL , -- son
[PartName] varchar(200) NULL , -- son
[Counts] DECIMAL(18,2) NULL ,   -- son
[ApplyPrice] [decimal](18, 2) NULL,  -- son
[ApprovalPrice] [decimal](18, 2) NULL,  -- son
[IsOldPart]  [varchar](1) NULL, --m
[StationNo] [varchar](8) NOT NULL, --m
[StationName][varchar](100) NOT NULL, --m
[ExpectDate] [datetime] NULL, --m
[OrderStatus] [varchar](4) NULL, --m
[ApplyTime] [datetime] NULL, --m
[CurrnetApprover] [varchar](20) NULL, --D
[ApprovalTime] [datetime] NULL, --D
[Supply] [varchar](200) NULL --s
);

CREATE TABLE #ReturnData (
[PageIndex] varchar(20) NULL ,
[PageSize] varchar(200) NULL ,
[totalNumber] varchar(20) NULL ,
[PageCount] varchar(50) NULL ,
);

 DECLARE @strSql varchar(MAX);
  --拼接Sql语句
set @strSql='
select
son.PartNo,
son.PartName,
son.Counts,
son.ApplyPrice,
son.ApprovalPrice,
m.IsOldPart,
m.StationNo,
m.StationName,
m.ExpectDate,
m.OrderStatus,
ApplyTime,
D.CurrnetApprover,
d.ApprovalTime,
s.Supply

from  B2B_BatchPartMain as m
JOIN B2B_BatchPartsInfo as son ON m.BOrderNo=son.BOrderNo
JOIN B2B_BatchApprovalDetail as D  ON  m.BOrderNo=D.BOrderNo
JOIN B2B_BatchSendPartInfo AS S ON  m.BOrderNo=S.BOrderNo
where 1=1'
   set @strSql= @strSql + ' AND convert(varchar(100), m.ApplyTime,21)>= ''' + convert(varchar(100), @startApplyTime,21)  + ''' '
   set @strSql= @strSql + ' AND convert(varchar(100), m.ApplyTime,21)<= ''' + convert(varchar(100), @endApplyTime,21) + ''' '
   set @strSql= @strSql + ' AND convert(varchar(100), m.ExpectDate,21)>= ''' +convert(varchar(100), @startExpectDate,21)  + ''' '
   set @strSql= @strSql + ' AND convert(varchar(100), m.ExpectDate,21)<= ''' +convert(varchar(100), @endExpectDate,21)  + ''' '

          if( @StationNo is not null)
             begin
                 set @strSql= @strSql + ' and m.StationNo =''' + @StationNo+'''' ;
             end
           --判断拼接Sql语句
           if( @StationName is not null) and (@StationName!='')
             begin
                set  @strSql= @strSql + '  and  m.StationName =''' + @StationName+'''' ;
             end
           if( @PartNo is not null)and (@PartNo!='')
             begin
                set  @strSql= @strSql + ' and son.PartNo =''' + @PartNo+'''' ;
             end
           if( @PartName is not null)and (@PartName!='')
             begin
                set  @strSql= @strSql + ' and  son.PartName =''' + @PartName+'''' ;
             end
           if( @IsOldPart is not null)and (@IsOldPart!='')
             begin
                set  @strSql= @strSql + ' and  m.IsOldPart =''' + @IsOldPart+'''' ;
             end
           if( @IsRebate is not null)and (@IsRebate!='')
             begin
                set  @strSql= @strSql + ' and  m.IsRebate =''' + @IsRebate+'''' ;
             end
          if( @IsTransport is not null)and (@IsTransport!='')
             begin
                set  @strSql= @strSql + ' and   m.IsTransport =''' + @IsTransport+'''' ;
             end
           --插入数据到临时表
      insert INTO #ReturnTable  exec(@strSql) ;
      --总数量
      DECLARE   @totalNumber  as INT  ;
         select @totalNumber=COUNT(PartNo) from #ReturnTable;
      -- 总页数
      DECLARE @PageCount  as INT  ;
         SET @PageCount= Ceiling(@totalNumber*1.0/@size);
      --插入返回信息
      INSERT into #ReturnData VALUES(@page,@size,@totalNumber,@PageCount)
      --分页查询数据
      select * from (select ROW_NUMBER() over(order by PartNo asc) as rowNumber  , * from #ReturnTable) as temp  where rowNumber between (((@page-1)*@size)+1) and (@page*@size)
      select * from  #ReturnData;

  --删除临时表
  drop table #ReturnTable
ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)
 
 
 
 
 
 
 
 
 

ASPNET CORE 核心 通过依赖注入(注入服务)

说起依赖注入 相信大家已经很熟悉了,这里我在简要的描述一遍,

什么是依赖注入:

我们从字面意义上来解释一下:依赖代表着两个或者多个对象之间存在某些特定的联系:举一个不是很恰当的例子

比如说一度夫妻组成的家庭里没有儿女,咱们暂且把这个家庭当做是一个对象(家),但是他们想要领养一个儿女怎么办,他们想通过福利院去找到这个合适的家庭成员,最终家庭里添加了一位新成员,这里福利院的角色咱们就称为注入者,添加的这个成员的动作就称为注入(DI)。 注入方式有很多,举一个简单的代码例子:

这是一个构造器注入的例子

ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)
/// <summary>
        /// 家庭对象
        /// </summary>
        public class family
        {
            /// <summary>
            /// 成员
            /// </summary>
            public string member { get; set; }
            //构造函数
            public family(string Value )
            {
                member = Value;
            }
        }
ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)

调用代码 如下

 Console.WriteLine("********************构造器注入******************");
            family family = new family("儿子");
            string ReturnValue=  family.member;
            Console.WriteLine(ReturnValue);
            Console.WriteLine("********************构造器注入******************");

输出结果:

ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)

方式有很多种网上资料还是很多的:

回到AspNetCore核心的依赖注入:

为什么说起这个:因为在Core 的Web程序启动的过程中,是通过Core的启动类Starup 中注册的 配置/和服务 辅助运行。Starup 中配置/和服务就是通过依赖注入注入进去的。

ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)
        注册MVC服务
        这是框架自动生成后的
        public void ConfigureServices(IServiceCollection services)

        {

            services.AddMvc();

        }
ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)
ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)
   自定义自己的服务
    public void ConfigureServices(IServiceCollection services)
        {          //增加自己的EF服务 并连接 数据库
          services.AddEntityFrameworkSqlServer().AddDbContext<EFDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SqlServer")));            //增加自己的EF 服务用来记录Log
            services.AddEntityFrameworkSqlServer().AddDbContext<EFLogDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SqlServerLog")));
      }
ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)

解决方案自动生成的 IOC容器,返回值为 void    如果想引入第三方容器的话需要更改此类的返回值, 返回值需要更改为 IServiceProvider  此接口只有一个方法

ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)

第三方没有用过就不写出来误导人了基本代码如下:

    public IServiceProvider ConfigureServices(IServiceCollection services)
        {

            services.AddMvc();
//在这里写第三方容器
        }

也可以在这这地方里注入第三方容器

ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)
 public IActionResult Index()
        {

            //RequestServices  获取或设置系统。提供对请求的访问的iServiceProvider服务容器。
            this.HttpContext.RequestServices.GetService();

            return View();
        }
ASPNETCOREAPI 跨域处理   SQL 语句拼接 多条件分页查询    ASPNET CORE 核心 通过依赖注入(注入服务)
上一篇:Mybatis中sql语句中的in查询,一定要判断null的情况


下一篇:MySQL解决忘记密码问题