本文目錄一覽:
- 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 程序。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/276899.html