api netcore 跨域支持_.NET Core WebApi的跨域、请求、发布

本文介绍了.NET Core 2.1创建WebApi项目时关于跨域、POST请求及发布的注意事项。讲解了wwwroot作为根目录的作用,以及如何在Post请求中使用[FromBody]接收参数。针对跨域问题,展示了在Startup.cs中配置CORS的方法,并讨论了.NET Core程序在IIS上的部署步骤,包括安装运行时和配置程序池。
摘要由CSDN通过智能技术生成

一、创建CoreWebApi项目,我选择的.NET Core 2.1,创建好之后,已经为我们生成了ValuesController示例,里面有基本的api。

d036bf42d85e590eae85cccf0549c109.png

1、我发现这里多了一个wwwroot的貌似文件夹的东西,这个我只是在有些虚拟主机根目录见过,其实这个东西在.NET Core的web项目中,它就是根目录,你创建一个.NET Core WebMVC项目,你会发现,静态文件都在wwwroot中,你要访问只需要输入~/就能访问到;为啥静态文件独立出来了,不是还有视图文件夹在根目录吗?现在不是这样了。

2、以前的Views视图文件,也会默认编译成dll文件,所以根目录下可能不存在views文件夹了,当然可以配置,让他不编译,视图文件经常修改嘛。

用记事本打开.csproj项目文件,修改PropertyGroup节点,增加MvcRazorCompileOnPublish节点即可

netcoreapp2.0

false

二、Post请求中,api用[FromBody]类型接收参数。/// 

/// Posts the specified value.

/// 

/// The value.

/// ActionResult<System.String>.

[HttpPost]

public ActionResult Post([FromBody] string value)

{

return "获取到:"+value;

}

这里很多人说请求之后接收不到,然后写参数的时候key写成空,虽然能接收到,但是肯定是不对的写法嘛,怎么可能设计成{“”:“123”}这样的方式嘛。

当FormBody后面跟着是string的时候,直接传字符串,当后面跟着对象的时候,传对象,这里很多人能接收到对象,接收不到string。

$.ajax({

url:"https://localhost:44302/api/values",

type: "post",

contentType: "application/json; charset=UTF-8",

data:"13777777777",

success: function (ret) {

console.log(ret);

},

error: function (jqxhr, textStatus, errorthrown) {

alert(textStatus);

}

});

其中重要的是:contentType: "application/json; charset=UTF-8"

如果没有这句,那么默认当成对象传输,传输过程中可能就被定义为下面这种形式:

=13777777777

或者

13777777777=

很多问题就出在这里,当定义成这种样式的时候,.Net CoreApi报400错误,提示有未被识别的字符=号

三、跨域,WebApi直接被请求,肯定是不行的,而且我们还在请求头里面修改了一个contentType,所以肯定是跨域拦截了,请求不通。

CoreApi配置很简单,在Startup.cs中ConfigureServices方法里面配置如下

services.AddCors(options =>

{

options.AddPolicy("any", builder =>

{

builder.AllowAnyOrigin() //允许任何来源的主机访问

.AllowAnyMethod()

.AllowAnyHeader()

.AllowCredentials();//指定处理cookie

});

});

添加配置之后,就可以以特性的方式进行使用了

[EnableCors("any")]

bca4be38858c43f482aee43374321e20.png

四、部署,这里说的是部署在IIS

1、我们先想个问题,.NET Core WebApi的能不能运行在IIS?

答案:废话,肯定可以,IIS只是一个服务器软件,它能运行大多数语言的后台程序。

2、我们原先的.NET Framework Web程序的发布方式还能不能适用于.NET Core Web程序?

答案:不能,你把.NET Framework和.NET Core理解一下,.NET Core是跨平台的,为了有跨平台性,运行方式肯定不可能和之前的一样。

3、我们要怎么样在IIS中运行.NET Core的程序?

答案:需要安装Windows环境的.NET Core 运行时。

我们搞清楚了以上几个问题,解决起来就胸有成竹了。

966faa021e9de232ef0cbd23b7c99b4e.png

2、安装完成之后,重启IIS,然后发现有个变化,模块中多了运行.NET Core 的一个模块。

ac03a61b416f402012d0d929071f1459.png

3、有了运行模块还不行,需要配置一下你的程序池。就ok了

d083e0d37930286da9731aea47b713f1.png

为什么改成这样,因为有默认的.NET Core的模块来运行程序了,这是.NET Framework的运行方式,当然不能使用。

有问题积极的留言交流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值