一、创建CoreWebApi项目,我选择的.NET Core 2.1,创建好之后,已经为我们生成了ValuesController示例,里面有基本的api。
1、我发现这里多了一个wwwroot的貌似文件夹的东西,这个我只是在有些虚拟主机根目录见过,其实这个东西在.NET Core的web项目中,它就是根目录,你创建一个.NET Core WebMVC项目,你会发现,静态文件都在wwwroot中,你要访问只需要输入~/就能访问到;为啥静态文件独立出来了,不是还有视图文件夹在根目录吗?现在不是这样了。
2、以前的Views视图文件,也会默认编译成dll文件,所以根目录下可能不存在views文件夹了,当然可以配置,让他不编译,视图文件经常修改嘛。
用记事本打开.csproj项目文件,修改PropertyGroup节点,增加MvcRazorCompileOnPublish节点即可 <PropertyGroup> <TargetFramework>netcoreapp2.0</TargetFramework> <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish> </PropertyGroup>
二、Post请求中,api用[FromBody]类型接收参数。
/// <summary> /// Posts the specified value. /// </summary> /// <param name="value">The value.</param> /// <returns>ActionResult<System.String>.</returns> [HttpPost] public ActionResult<string> 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")]
四、部署,这里说的是部署在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 运行时。
我们搞清楚了以上几个问题,解决起来就胸有成竹了。
1、前往官网下载运行时,地址:https://dotnet.microsoft.com/download
2、安装完成之后,重启IIS,然后发现有个变化,模块中多了运行.NET Core 的一个模块。
3、有了运行模块还不行,需要配置一下你的程序池。就ok了
为什么改成这样,因为有默认的.NET Core的模块来运行程序了,这是.NET Framework的运行方式,当然不能使用。
有问题积极的留言交流
留下您的脚步
最近评论