ASPNETCOREAPI跨域处理SQL语句拼接多条件分页查询
ASPNETCORE核⼼通过。。。
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
如果没有右击项⽬依赖项代开NuGet管理⼯具
如图所⽰查:
2.3:在Startup.cs ⽂件的ConfigureServices⽅法中注⼊如下代码:
(1)第⼀种
services.AddCors(options => options.AddPolicy("Domain",
builder => builder.WithOrigins("a.example",
"c.example").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));
"a.example", "c.example" 代表着允许访问的域,就好像给这个域开放了⼀个权限,允许访问的权限,可以写多个逗号分隔
(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 查看源 阅读注释就明⽩了。
在项⽬中可以写 多个services.AddCors() 需要注意的是 Domain1 的区别 咱们可以针对不同的限制些不同的 限制规则
services.AddCors(options => options.AddPolicy("Domain1",
builder => builder.WithOrigins("a.example",
"c.example").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));
services.AddCors(options => options.AddPolicy("Domain2",
builder => builder.WithOrigins("a.example",
"c.example").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));
services.AddCors(options => options.AddPolicy("Domain3",
builder => builder.WithOrigins("a.example",
"c.example").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));
services.AddCors(options => options.AddPolicy("Domain4",
builder => builder.WithOrigins("a.example",
"c.example").AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin().AllowCredentials()));
为什么做这么多限制呢:其实⼤家每个请求都包含了很多内容:
⽐如:通过 抓包⼯具看到的每条请求所包含的请求信息
再⽐如:我们通过HTTP发送请求时进⾏的设置:下图举例还可以设置更多的设置,这些设置都可以通过                                        services.AddCors()来进⾏设置:
2.4:在Startup.cs ⽂件中的Configure()⽅法中注册我们的  Domain
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseCors("Domain1");
app.UseCors("Domain2");
app.UseCors("Domain3");
app.UseCors("Domain4");
}
上⾯操作完之后我们就结束了准备任务现在可以进⾏使⽤了:使⽤⽅法如下:
2.5:使⽤如下:
(1)第⼀种  action
[HttpGet("{OrderNO}/{BranchID}")]
//启⽤跨域
[EnableCors("Domain")]
public Object getMultipleOrderDetail(string OrderNO, int OrderNoType, string BranchID)
{
MultipleOrderDetail(OrderNO, OrderNoType, BranchID);
}
(2)第⼆种  控制器
//启⽤跨域
[EnableCors("Domain")]
[Produces("application/json")]
[Route("api/BorrowOrder/[action]")]
public class SP_PartsBorrowOrderController : Controller
{
2.6 :前台调⽤代码如下:
重点是:这个节点    xhrFields: { withCredentials:true //跨域请求中带cookie },//必须有这项的配置,不然cookie⽆法发送⾄服务端
<div>
<input id="login" value="跨域请求" type="button" />
</div>
<script>
$("#login").click(function () {
debugger
$.ajax({
type: 'POST',
url: "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>
本⽂是以 CORS 进⾏实现
转载请注明出处谢谢!
⽤17写AspNetCore 也⼀年了,最近出现了这个问题 :
在点击发布的时候 报错了,构建失败的问题,刚开始还排查⽇⼦,删除以往的发布遗留痕迹,后来发现不⾏,
但是项⽬在本地运⾏的时候是好使的,⽣成也不会报错。
我们项⽬中有3个解决⽅案,只有其中⼀个可以进⾏发布,我就对项⽬的(共同引⽤)进⾏查看。
这是错误信息:
解决⽅法:我以前⽤的是2.0.0版本的,可能在项⽬中新建的解决⽅案我引⽤的是2.0.3的,导致另外两个解决⽅案发布不了。总之我跟新了引⽤包就OK了
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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。