本文目录一览:
- 1、vs新建asp.net项目出现问题?
- 2、.net mvc发布到iis之后接口总是被调用两次,实在查不到原因了?
- 3、从调用API接口 看.net framework和 net core的异同
- 4、Asp.netCore3.0 WebApi从0到1手摸手教你写【1】简单的webapi接口
- 5、vscode 开发.net core 1.0 怎么玩
vs新建asp.net项目出现问题?
你没明白.netcore的运行方式
首先确定你本机已经安装了dotnetcore sdk
再powershell里运行dotnet --list-sdks可以看出来
然后你再看项目文件夹顶层应该有个global.json啥的,如果没有,那有可能不是正规的项目,编辑里面的版本,为你已经安装的版本,再编译
另外有些三方库一般是通过nuget安装,你打开项目后,项目名右键-nuget还原就可以装相应的库,要联网安装
----------以上是打开现有项目
新建项目就报错的话,很有可能是你没安装相应模块,再打开vs installer 把.net core 和asp.net相关的都勾上
.net mvc发布到iis之后接口总是被调用两次,实在查不到原因了?
控制变量法诊断
新建一个最简单mvc程序,加上log,看会调用两次吗
你的程序调试时候没问题,是发布到iis才调两次?
现在微软主推.netcore,也就是不需要iis,只用命令行也可以运行web程序了,你可以试试这个
从调用API接口 看.net framework和 net core的异同
由于.netcore是跨平台使用的,所有微软重写好多API,由此有些差异也是正常的。现在就来看下请求API的差别吧。首先,原本的.netframework请求方法:复制代码publicstaticTHttpPostWithDecompression(stringrequest,stringurl,inttimeout)whereT:new(){varhttpWebRequest=(HttpWebRequest)WebRequest.Create(url);httpWebRequest.Proxy=null;httpWebRequest.Timeout=timeout;httpWebRequest.Method="POST";httpWebRequest.ContentType="application/json";httpWebRequest.AutomaticDecompression=DecompressionMethods.Deflate|DecompressionMethods.GZip;varbytes=Encoding.UTF8.GetBytes(request);StreamrequestStream=null;varresponseContent=string.Empty;try{requestStream=httpWebRequest.GetRequestStream();requestStream.Write(bytes,0,bytes.Length);varwebResponse=httpWebRequest.GetResponse();varstream=webResponse.GetResponseStream();if(stream!=null){varstreamReader=newStreamReader(stream);responseContent=streamReader.ReadToEnd();streamReader.Close();}webResponse.Close();returnJsonConvert.DeserializeObject(responseContent);}catch(Exceptionexception){returnnewT();}finally{if(requestStream!=null){requestStream.Close();}}}复制代码第一种返回错误编码的.netcore的写法:复制代码publicasyncstaticTaskHttpPostWithDecompression(stringrequest,stringurl,inttimeout)whereT:new(){varhttpWebRequest=(HttpWebRequest)WebRequest.Create(url);httpWebRequest.Proxy=null;httpWebRequest.ContinueTimeout=timeout;httpWebRequest.Method="POST";httpWebRequest.ContentType="application/json";httpWebRequest.Headers["Accept-Encoding"]="gzip,deflate";//httpWebRequest.AutomaticDecompression=DecompressionMethods.Deflate|DecompressionMethods.GZip;vardata=Encoding.UTF8.GetBytes(request);using(varrequestStream=awaithttpWebRequest.GetRequestStreamAsync())//释放{requestStream.Write(data,0,data.Length);}stringresult=string.Empty;//响应流using(varresponse=(HttpWebResponse)awaithttpWebRequest.GetResponseAsync()){StreamresponseStream=null;if(response.StatusCode==HttpStatusCode.OK){responseStream=response.GetResponseStream();if(responseStream!=null){varstreamReader=newStreamReader(responseStream,Encoding.UTF8);//获取返回的信息result=streamReader.ReadToEnd();returnJsonConvert.DeserializeObject(result);}}}returnnewT();}复制代码查看下.netcore下的属性和方法:可以明显发现比.netframwork下少了好多。也就是.netcore的请求类型,更趋于向浏览器的请求头靠拢,也就是使用Headers字典(.netframwork下也有,但是同层级也会有一些属性,比如采用压缩)。主要的区别就是响应流采用的是异步的方式,而.netframwork采用同步的方式,必须手动close(),而新的写法,就只能用using了。但是,上述的这个方法,害死人了,请求也成功,就是编码始终调试不对,请求各位大神指点一二。由于水平问题,未能解决上述问题,所以小弟采用.netcore的HttpClientHandler类进行http请求:get方法复制代码//////get请求//////url包含参数publicstaticasyncTaskdoGet(stringurl)whereT:new(){varhandler=newHttpClientHandler(){AutomaticDecompression=DecompressionMethods.GZip};using(varhttp=newHttpClient(handler)){varresponse=awaithttp.GetAsync(url);//确保HTTP成功状态值response.EnsureSuccessStatusCode();stringresponseStr=response.Content.ReadAsStringAsync().Result;returnJsonConvert.DeserializeObject(responseStr);}}复制代码post请求复制代码//////post请求//////url包含参数publicasyncstaticTaskHttpPostWithDecompression(stringrequest,stringapiUrl,inttimeout)whereT:new(){HttpClientHandlerhandler=newHttpClientHandler();handler.Proxy=null;handler.AutomaticDecompression=DecompressionMethods.GZip|DecompressionMethods.Deflate;vardata=Encoding.UTF8.GetBytes(request);using(varhttpClient=newHttpClient(handler)){httpClient.BaseAddress=newUri(apiUrl);httpClient.DefaultRequestHeaders.Accept.Add(newMediaTypeWithQualityHeaderValue("application/json"));varcont=newStringContent(request);//varcontent=newFormUrlEncodedContent(JsonConvert.DeserializeObject(request));//被上面这个注释掉的代码,这种偷懒转Dic的方式给坑苦了,不能这么用啊!!!varresponse=awaithttpClient.PostAsync(apiUrl,cont);stringresult=response.Content.ReadAsStringAsync().Result;returnJsonConvert.DeserializeObject(result);}}
Asp.netCore3.0 WebApi从0到1手摸手教你写【1】简单的webapi接口
Visual Studio 2019
.net core 3.0
具体步骤如下图:
此处我们选择API(新手不推荐选择空项目,选择API系统会为我们自动创建WebApi需要的一些配置文件等),Https配置这一项我们暂时不勾选,目前我们不配置Https。
F5运行项目,然后就可以看到微软为我们写好的一个天气预报示例webapi了,这里只有一个Get请求示例,返回值为json格式。
注意: services.AddControllers(); 和 endpoints.MapControllers(); 方法成对出现, 这是.net core3.0中的最新写法
ConfigureServices方法
用来向容器中注册服务,注册好的服务可以在其他地方进行调用.
Configure方法
用来配置中间件管道,即如何响应http请求.
1 右键删除系统默认创建的 WeatherForecastController.cs 和 WeatherForecast.cs
2 新建一个控制器,命名: UserController.cs
问题来了,为啥直接给打开 weatherforecast ,而且还404了,别急,往下看。
(┬_┬)怎么还是404?别急继续往下看
上面增加 action 虽然能达到想要的结果,但是每次新建一个 Controller 都有写个 action 万一要是忘记了又要忙乎半天,有没有一劳永逸的办法呢?
继续往下看:
1.首先去掉Controller里的 Route 和 ApiController
2.修改 Startup.cs ,增加路由模版:
今天就到这里,后期继续完善我们的webapi。
vscode 开发.net core 1.0 怎么玩
环境安装
本文开发的实际环境: win10 x64 VSCode 1.0
下载
.NET Core SDK Installer:
VSCode :
VSCode C#插件:
安装C#插件
上一篇评论区有很多园友出现 OmniSharp server is not running.
出现这个主要原因是没有下载下来 OmniSharp server 部分。
这里大家最好全程挂着代理来安装,保证OmniSharp 完全下载完毕。
如果大家没有代理,我给大家封装了一个 C# 插件 基于OmniSharp 最新版封装。
安装好以后就可以直接使用,不会再出现 OmniSharp server is not running.
重磅推荐:点击下载 (密码:Caon)注意事项:本插件只适用于 windows x64 系统 ,其他系统请下载官方插件。
安装插件:直接用VSCode 打开插件文件就可以安装了。
安装完以后重启,出现如上图所示代表插件安装成功。
创建项目
1.新建文件夹 netcoredemo
2.创建项目 dotnet new
3.新建NuGet.Config
新建一个 NuGet.Config 将下面内容复制进去。
?xml version="1.0" encoding="utf-8"?
configuration
packageSources
clear /
add key="AspNetCI" value="" /
add key="NuGet.org" value="" /
/packageSources
/configuration
4.使用VSCode 打开 netcoredemo
打开netcoredemo 文件夹,会有一个提升点击Yes 就可以了。
第一次打开项目会发现报一些错误,已经为你自动生成launch.json,以及会让你自动还原相关引用。
这里要在project.json 做一点改动。
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0-rc2-*"
}
},
将 Microsoft.NETCore.App version 版本改为 1.0.0-rc2-*
更改以后F1 dotnet restore 重新还原一次引用就可以了。
配置调试
1.调试
点击调试,会发现无法进行调试,断点断不下来。
这里我们需要做一个配置。
打开project.json 文件 在节点: compilationOptions 加入: "debugType": "portable"
"compilationOptions": {
"debugType": "portable"
},
编辑好以后保存,重新打开VSCode 。
再点击调试,发现断点已经可以断下,查看参数等操作都可以正常进行。
2.开发
智能提示提供强大支持。
这样我们就可以开发.NET Core 程序,同时可以使用VSCode 调试 .NET Core 程序。