當前位置:首頁 » 網頁前端 » aspnetwebapi下載
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

aspnetwebapi下載

發布時間: 2022-12-31 10:47:20

1. 如何在Windows Server2008R2中部署WebAPI

一、安裝說明:
1、安裝基本信息
電腦軟體
在WindowsServer2008(或WindowsServer2008R2)中,單擊「開始」-「程序」-「管理工具」-「伺服器管理」,或在「運行」中輸入命令:servermanager.msc命令打「伺服器管理」程序。
在「角色」選項中,單擊「添加角色」:
選擇伺服器角色:Web伺服器(IIS)
單擊選中「web伺服器(IIS))前面的單選框。
在彈出的對話框中,單擊「添加必需的功能」:

「添加角色向導」對web伺服器進行簡單介紹,之後單擊「下一步」:
選擇角色需要的相關服務之後單擊「下一步」:
確認安裝選擇,之後單擊「下一步」:
系統開始安裝所選的角色服務,可能需要幾十秒可幾鍾時間:
安裝完成,點擊關閉即可:

名稱:IIS7.0安裝
大小:10MB|版本:7.0|類別:系統工具|語言:中文
應用平台:windows server 2008
2、安裝介紹
windows server 2008系統中的iis安裝,與windows server 2003中的安裝明顯不再相同了,windows server 2008安裝iis,不再需要其他相關組件,不像windows server 2003需要有i386文件,下面來詳細介紹一下,windows server 2008安裝iis的步驟:
二、安裝步驟:
開始--伺服器管理--角色--添加角色

點擊添加必需的功能

勾選在「Web伺服器(IIS)」

點擊下一步

下面是選擇「角色服務」的,針對你需要的進行相應的選擇

然後點擊「下一步」開始確認安裝

然後等待安裝成功

2. 一文回顧.NET Core 基礎設施演進之路

作者丨Matt Mitchell

譯者丨平川

隨著.NET Core 3.0 預覽版 6 的推出,我們認為有必要簡要回顧一下基礎設施系統的 歷史 ,以及在過去一年左右時間里所做的重大改進。如果你對構建基礎設施感興趣,或者希望了解如何構建像.NET Core 這樣大的產品,那麼這篇文章將非常有趣。

從 3 年前開始,.NET Core 項目就與傳統的微軟項目有很大的不同。

我們早期的基礎設施決策是圍繞必要性和便利性做出的。我們使用 Jenkins 進行 GitHub PR 和 CI 驗證,因為它支持跨平台的 OSS 開發。我們的官方構建版本位於 Azure DevOps(當時稱為 VSTS)和 TeamCity(由 ASP 使用)中,其中有簽名和其他關鍵的交付基礎設施。我們搭配使用手動更新包依賴項版本和自動化 GitHub PR 的方法將存儲庫集成在一起。團隊獨立地構建了他們需要的工具來進行打包、布局、本地化,以及在大型開發項目中出現的所有其他常見任務。雖然不是很理想,但在某種程度上,這在早期已經運行得足夠好了。隨著項目從.NET Core 1.0 和 1.1 發展到 2.0 以及更高版本,我們希望投資於進一步整合的技術棧、更快的交付周期和更簡單的服務。我們希望每天多次使用最新的運行時來生成一個新的 SDK。我們希望所有這些都不降低獨立存儲庫的開發速度。

.NET Core 面臨的許多基礎設施方面的挑戰都源於存儲庫結構的隔離和分布式特性。盡管多年來它變化很大,但該產品是由 20 到 30 個獨立的 Git 存儲庫組成(ASP.NET Core 直到最近還比它多得多)。一方面,擁有許多獨立的開發豎井會使這些豎井中的開發非常高效;開發人員可以在庫中快速迭代,而不用擔心棧的其他部分。另一方面,它使得整個項目的創新和集成效率大大降低。下面是一些例子:

在所有這些情況下,都有可能在許多層面上出現失敗,從而進一步減緩進程。隨著.NET Core 3.0 計劃的正式啟動,很明顯,如果不對基礎設施進行重大更改,我們就無法創建所需范圍的版本。

為了減輕痛苦,我們三管齊下:

Arcade

在.NET Core 3.0 之前,有 3 到 5 種不同的工具實現分散在不同的存儲庫中,這和你如何計算有關。

雖然在這個世界上,每個團隊都可以定製他們的工具,只構建他們需要的東西,但這確實有一些顯著的缺點:

開發人員在存儲庫之間切換時效率更低

例如:當開發人員從 dotnet/corefx 切換到 dotnet/core-sdk 時,存儲庫的「語言」是不同的。她輸入什麼來構建和測試?日誌放在哪裡?如果她需要在存儲庫中添加一個新項目,該如何做?

需要的每個特性都要構建 N 次

例如:.NET Core 生成了大量的 NuGet 包。雖然有一些變化(例如,共享運行時包如出自 dotnet/core-setup 的 Microsoft.NETCore.App 就與 Microsoft.AspNet.WebApi.Client 等「普通」包的構建方式不同),但生成它們的步驟非常相似。遺憾的是,由於存儲庫在布局、項目結構等方面的差異,如何實現這些打包任務方面也產生了差異。存儲庫如何定義應該生成什麼包、這些包中包含什麼、它們的元數據等等。如果沒有共享工具,團隊通常更容易實現另一個打包任務,而不是重用另一個。這當然會導致資源壓力。

藉助 Arcade,我們努力使所有的存儲庫採用公共的布局、存儲庫「語言」和任務集(可能的話)。這並非沒有陷阱。任何一種共享工具最終都會解決一些「剛剛好」問題。如果共享工具過於規范,那麼在任何規模的項目中進行所需的定製都將變得非常困難,並且更新該工具也將變得非常困難。使用新的更新很容易破壞存儲庫。構建工具遭受了這種痛苦。使用它的存儲庫與它緊密耦合,以至於它不僅不能用於其他存儲庫,而且對構建工具進行任何更改常常會以意想不到的方式傷害用戶。如果共享工具不夠規范,那麼存儲庫在使用工具時往往會出現差異,並且推出更新通常需要在每個單獨的存儲庫中做大量的工作。那麼,為什麼要共享工具呢?

實際上,Arcade 嘗試同時使用了這兩種方法。它將公共存儲庫「語言」定義為腳本集(請參閱 eng/common)、公共存儲庫布局和作為 MSBuild SDK 推出的公共構建目標集。選擇完全採用 Arcade 的存儲庫具有可預測的行為,使得更改很容易在存儲庫之間傳播。不希望這樣做的存儲庫可以從提供基本功能(如簽名和打包)的各種 MSBuild 任務包中進行選擇,這些任務包在所有存儲庫中看起來都是一樣的。當我們對這些任務進行更改時,我們會盡力避免破壞性更改。

讓我們來看看 Arcade 提供的主要特性,以及它們如何集成到我們更大的基礎設施中。

Azure DevOps

如上所述,較大的團隊通過 2.2 版本使用了一個 CI 系統的組合:

許多差異僅僅是出於必要性。Azure DevOps 不支持公共 GitHub PR/CI 驗證,所以 ASP.NET Core 轉向 AppVeyor 和 Travis 來填補這個空白,而.NET Core 則投資於 Jenkins。經典 Azure DevOps 對構建編排沒有太多的支持,所以 ASP.NET Core 團隊求助於 TeamCity,而.NET Core 團隊則在 Azure DevOps 之上構建了一個名為 PipeBuild 的工具來幫助克服困難。所有這些差異都是非常昂貴的,即使是以一些不明顯的方式:

當 Azure DevOps 開始推出基於 YAML 的構建管道和對公共 GitHub 項目的支持時,隨著.NET Core 3.0 的啟動,我們意識到,我們擁有一個獨特的機會。有了這種新的支持,我們可以將現在所有的工作流從單獨的系統轉移到現代的 Azure DevOps 中,並對我們處理正式 CI 和 PR 工作流的方式進行一些更改。我們的工作大致如下:

到目前為止,所有主要的.NET Core 3.0 存儲庫都在 Azure DevOps 上進行公共 PR 和正式 CI。一個很好的例子是 dotnet/arcade 本身的正式構建 /PR 管道。

Maestro 和依賴流

.NET Core 3.0 基礎架構的最後一塊拼圖就是我們所說的依賴流。這並不是.NET Core 獨有的概念。除非它們是完全自包含的,否則大多數軟體項目都包含對其他軟體的某種版本化引用。在.NET Core 中,這些包通常表現為 NuGet 包。當我們需要庫提供的新特性或修復時,我們通過更新項目中引用的版本號來獲取這些新更新。當然,這些包也可能有對其他包的版本化引用,那些其他包可能有更多的引用,等等。這就形成了一張圖。當每個存儲庫拉取其輸入依賴項的新版本時,更改將在圖中流動。

一個復雜的圖

大多數軟體項目的主要開發生命周期(開發人員經常從事的工作)通常涉及少量相互關聯的存儲庫。輸入依賴關系通常是穩定的,更新很少。當他們確實需要更改的時候,通常是手工操作。開發人員評估輸入包的可用版本,選擇合適的版本,然後提交更新。但在.NET Core 中並非如此。組件需要獨立,以不同的節奏交付,並具有高效的內循環開發體驗,這導致了大量具有大量相互依賴關系的存儲庫。相互依賴關系也形成了一個相當深的圖:

Dotnet/core-sdk 存儲庫作為所有子組件的聚合點。我們提供了一個特定的 dotnet/core-sdk 構建,它描述了所有其他引用的組件。

我們還希望新的輸出能夠快速通過這個圖,以便盡可能多地驗證最終產品。例如,我們期望 ASP.NET Core 或.NET Core 運行時的最新片段盡可能多地在 SDK 中表現自己。本質上,這意味著定期快節奏地更新每個存儲庫中的依賴項。在一個足夠大的圖中,就像.NET Core 一樣,這很快就變成了一個不可能手工完成的任務。這種規模的軟體項目可能會通過以下幾種方法來解決這個問題:

.NET Core 已經嘗試了所有 3 種方法。我們在 1.x 的早期漂移版本。在 2.0 中實現了一定程度的自動化依賴流,並為 2.1 和 2.2 構建了一個復合構建。在 3.0 中,我們決定大量投資於自動化依賴流,放棄其他方法。我們想在一些重要的方面改進我們以前的 2.0 基礎設施:

這些概念的設計使得存儲庫所有者不需要棧或其他團隊流程的全局知識就可以參與依賴流。他們只需要知道三件事:

.NET Core 3 開發通道的流圖,包括.NET Core 3 Dev 流的其他通道(例如,Arcade 的「.NET Tools Latest」)。

一致和不一致

非一致性會導致哪些問題? 不一致性表示可能的錯誤狀態。舉個例子,讓我們看看 Microsoft.NETCore.App。這個包表示特定的 API 表面。雖然存儲庫依賴關系圖中可能會引用 Microsoft.NETCore.App 的多個版本,但 SDK 只提供一個。這個運行時必須滿足可在該運行時上執行的間接引用組件(例如 WinForms 和 WPF)的所有需求。如果運行時不滿足這些需求(例如破壞性 API 變更),可能就會發生故障。在不一致的圖中,因為所有存儲庫都沒有使用相同版本的 Microsoft.NETCore.App,有可能錯過了一個破壞性的變更。

這是否意味著不一致始終是一種錯誤狀態? 不。例如,我們假設圖中 Microsoft.NETCore.App 的不一致只代表一個非破壞性 JIT Bug 修復 coreclr 中的一個變更。從技術上講,微軟沒有必要在圖中的每一點上獲取新的 Microsoft.NETCore.App。只需針對新的運行時交付相同的組件就足夠了。

如果不一致只是偶爾的問題,那麼我們為什麼還要努力才能推出一致的產品呢? 因為很難確定什麼時候不一致無關緊要。簡單地將一致性作為所需狀態進行交付,要比試圖理解不一致的組件之間的任何語義差異對最終產品所產生的影響更容易。這是可以做到的,但是從構建頻率來說,它是時間密集型的,並且容易出錯。強制將一致性作為默認狀態更安全。

依賴流的好處

隨著存儲庫圖越來越大,所有這些自動化和跟蹤都有許多明顯的優勢。它為我們解決日常生活中的實際問題提供了很多可能性。雖然我們剛剛開始 探索 這個領域,但系統已經可以開始回答一些有趣的問題,並處理以下場景:

隨著.NET Core 3.0 逐步結束,我們正在尋找新的領域來改進。雖然計劃仍處於(非常)初期的階段,但我們預計在以下幾個關鍵領域進行投資:

多年來,我們已經對基礎設施進行了相當大的改進。從 Jenkins 到 Azure DevOps,從手工依賴流到 Maestro++,從許多工具實現到一個工具實現,我們對.Net Core 3.0 所做的改變是一個巨大的進步。我們已經為開發和交付比以往任何時候都更可靠、更令人興奮的產品做好了准備。

原文鏈接:

https://devblogs.microsoft.com/dotnet/the-evolving-infrastructure-of-net-core/

3. rails相較於.net WebAPI有什麼優勢,有什麼劣勢

vs中,打開工具=>nuget程序包管理器=>程序包管理器控制台,然後其中一行一行地輸入以下的更新指令。Update-PackageMicrosoft.AspNet.WebApi-Version5.2.2漢化包Update-PackageMicrosoft.AspNet.WebApi.Client.zh-Hans-Version5.2.2Update-PackageMicrosoft.AspNet.WebApi.Core.zh-Hans-Version5.2.2Update-PackageMicrosoft.AspNet.WebApi.WebHost.zh-Hans-Version5.2.2Update-PackageEntityFramework-Version6.0.1Update-PackageEntityFramework.zh-Hans-Version6.0.1Update-PackageMicrosoft.AspNet.Mvc-Version5.2.2Update-PackageMicrosoft.AspNet.Mvc.zh-Hans-Version5.2.2Update-PackageMicrosoft.AspNet.WebApi.HelpPage-Version5.2.2Update-PackageMicrosoft.AspNet.WebApi.OData-Version5.2.2Update-PackageMicrosoft.AspNet.WebApi.Tracing-Version5.2.2上面package的版本號參考了vs2013中的webapi項目模板中的版本號。引入這些包的過程中,vs有可能提示要重啟vs,請重啟vs。錯誤:「未能找到元數據文件」更新完package之後,重新編譯,有可能出現「未能找到元數據文件」。解決的方法是找到出錯的項目,然後去掉報錯的引用項,然後再重新引用。錯誤:預定義的類型"Microsoft.CSharp.RuntimeBinder.Binder"未定義或未導入錯誤再次編譯,有可能出現錯誤提示「預定義的類型"Microsoft.CSharp.RuntimeBinder.Binder"未定義或未導入」,解決的方法是:(1)用記事本打開項目文件(後綴名為.csproj),找到項,可能會找到多個,選擇其中一個,在裡面加入(2)保存項目文件,然後重新載入項目項目文件。

4. aspnet怎麼實現前後端分離

1、前後端分離,那後端就不應該修改前端項目文件,並且前後端交互都應通過ajax執行。所以,後端只需要提供api,前端在html調用api即可。
2、要提供api的話,aspx也可以做,但因為page的中間件會造成性能的浪費,可以用ashx去做。當然最推薦的還是使用webapi。
更多關於aspnet怎麼實現前後端分離,進入:https://m.abcgonglue.com/ask/5114751615595700.html?zd查看更多內容

5. 誰能幫我看看這個aspnet的web開發應用怎麼做啊小妹我實在不行了...

這個工作量相當大的,你跑任務網發任務吧:
http://www.taskcn.com/

6. 使用aspnet.identity 身份驗證的框架中,怎麼對現有用戶進行刪除

首先讓我先更新 API 項目

我先 API 項目進行必要修改修改完再切換 Web 項目客戶端進行更新

第1步:我需要資料庫

能做任何操作前我需要先創建資料庫本例使用 SQL Server Express沒安裝載 SQL Server Express安裝完創建名 CallingWebApiFromMvc 資料庫第步要做

Api 項目需要資料庫連接字元串否則我寸步難行面段代碼插入 Api 項目Web.config 文件:

認證(Identity)框架自創建我管理用戶所需要員關系表現需要擔提前創建

第2步:添加相關Nuget包

接我添加用於OWINWindows認證Nuget包打包管理控制台切換Api項目預設項目輸入命令:

Install-Package Microsoft.AspNet.WebApi.Owin
Install-Package Microsoft.Owin.Host.SystemWeb
Install-Package Microsoft.AspNet.Identity.EntityFramework
Install-Package Microsoft.AspNet.Identity.Owin

使用些包我應用啟OWIN伺服器通EntityFramework我用戶保存SQL Server

第3步:添加管理用戶Identity類

我使用基於Windows認證機制Entity框架管理資料庫相關業務首先我需要添加些用於處理類Api項目添加Identity目錄作我要添加類命名空間添加類:

public class ApplicationUser : IdentityUser
{
}

public class ApplicationDbContext : IdentityDbContext
{ public ApplicationDbContext() : base("ApiFromMvcConnection") {}
public static ApplicationDbContext Create()
{ return new ApplicationDbContext();
}
}

注意我傳給基類構造函數參數ApiFromMvcConnection要Web.config連接字元串name相匹配

public class ApplicationUserManager : UserManager
{ public ApplicationUserManager(IUserStore store) : base(store)
{
} public static ApplicationUserManager Create(IdentityFactoryOptions options, IOwinContext context)
{ var manager = new ApplicationUserManager(new UserStore (context.Get ()));
// Configure validation logic for usernames
manager.UserValidator = new UserValidator (manager)
{
= false,
RequireUniqueEmail = true
};
// Configure validation logic for passwords
manager.PasswordValidator = new PasswordValidator
{
RequiredLength = 6,
RequireNonLetterOrDigit = true,
RequireDigit = true,
RequireLowercase = true,
RequireUppercase = true,
}; var dataProtectionProvider = options.DataProtectionProvider;
if (dataProtectionProvider != null)
{
manager.UserTokenProvider = new DataProtectorTokenProvider (dataProtectionProvider.Create("ASP.NET Identity"));
} return manager;
}
}

第4步:添加OWIN啟類

讓我應用程序作OWIN伺服器運行我需要應用程序啟初始化我通啟類做點我裝點類
OwinStartup屬性應用程序啟觸發意味著我擺脫Global.asax移
Application_Start代碼轉換我新啟類

using Microsoft.Owin;

[assembly: OwinStartup(typeof(Levelnis.Learning.CallingWebApiFromMvc.Api.Startup))]
namespace Levelnis.Learning.CallingWebApiFromMvc.Api
{
using System;
using System.Web.Http;
using Identity;
using Microsoft.Owin.Security.OAuth;
using Owin;
using Providers;
public class Startup
{ public void Configuration(IAppBuilder app)
{
GlobalConfiguration.Configure(WebApiConfig.Register);
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext (ApplicationUserManager.Create); var oAuthOptions = new
{
TokenEndpointPath = new PathString("/api/token"),
Provider = new ApplicationOAuthProvider(),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
AllowInsecureHttp = true
};
// Enable the application to use bearer tokens to authenticate users
app.UseOAuthBearerTokens(oAuthOptions);
}
}
}

應用程序啟我建立自伺服器我配置令牌端點並設置自自定義提供商我用我用戶進行身份驗證我例我使用ApplicationOAuthProvider類讓我看看現:

第5步:添加OAuth提供商

public class ApplicationOAuthProvider :
{ public override Task ValidateClientAuthentication( context)
{
context.Validated();
return Task.FromResult (null);
}
public override async Task GrantResourceOwnerCredentials( context)
{
var userManager = context.OwinContext.GetUserManager ();
var user = await userManager.FindAsync(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect."); return;
}
var oAuthIdentity = await user.GenerateUserIdentityAsync(userManager, OAuthDefaults.AuthenticationType); var cookiesIdentity = await user.GenerateUserIdentityAsync(userManager, CookieAuthenticationDefaults.AuthenticationType); var properties = CreateProperties(user.UserName); var ticket = new AuthenticationTicket(oAuthIdentity, properties);
context.Validated(ticket);
context.Request.Context.Authentication.SignIn(cookiesIdentity);
}
private static AuthenticationProperties CreateProperties(string userName)
{
var data = new Dictionary
{
{
"userName", userName
}
};
return new AuthenticationProperties(data);
}
}

我興趣2種第ValidateClientAuthentication驗證客戶端我客戶端所返
功非同步簽名沒非同步調用發我離非同步修改我必須返任務自我增加名
看起像:

public class ApplicationUser : IdentityUser
{ public async Task GenerateUserIdentityAsync(UserManager manager, string authenticationType)
{
var userIdentity = await manager.CreateIdentityAsync(this, authenticationType);
return userIdentity;
}
}

第6步:注冊新用戶 - API端
所我位所Identity類管理用戶讓我看看RegisterController新用戶保存我資料庫接受RegisterApi模式簡單:

public class RegisterApiModel
{
[Required]
[EmailAddress] public string Email { get; set; }

[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
public string Password {
get; set;
}

[Required]
[Display(Name = "Confirm Password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}

控制器本身注冊功返200 OK響應驗證失敗則返401錯誤請求響應

public class RegisterController : ApiController
{ private ApplicationUserManager UserManager
{ get
{ return Request.GetOwinContext().GetUserManager ();
}
} public IHttpActionResult Post(RegisterApiModel model)
{ if (!ModelState.IsValid)
{ return BadRequest(ModelState);
} var user = new ApplicationUser
{
Email = model.Email,
UserName = model.Email,
EmailConfirmed = true
};
var result = UserManager.Create(user, model.Password);
return result.Succeeded ? Ok() : GetErrorResult(result);
}
private IHttpActionResult GetErrorResult(IdentityResult result)
{
if (result == null)
{
return InternalServerError();
}
if (result.Errors != null)
{
foreach (var error in result.Errors)
{
ModelState.AddModelError("", error);
}
}
if (ModelState.IsValid)
{
// No ModelState errors are available to send, so just return an empty BadRequest.
return BadRequest();
}
return BadRequest(ModelState);
}
}

7. 用MVC WebApi寫介面,網閘上了之後,方法訪問不到,埠已經全部開放

VisualStudio為我們提供了專門用於創建ASP.NETWebAPI應用的項目模板,藉助於此項目模板提供的向導,我們可以「一鍵式」創建一個完整的ASP.NETWebAPI項目。在項目創建過程中,VisualStudio會自動為我們添加必要的程序集引用和配置,甚至會為我們自動生成相關的代碼,總之一句話:這種通過向導生成的項目在被創建之後其本身就是一個可執行的應用。對於IDE提供的這種旨在提高生產效率的自動化機制,我個人自然是推崇的,但是我更推薦讀者朋友們去了解一下這些自動化機制具體為我們做了什麼?做這些的目的何在?哪些是必需的,哪些又是不必要的?正是基於這樣的目的,在接下來演示的實例中,我們將摒棄VisualStudio為我們提供的向導,完全在創建的空項目中編寫我們的程序。這些空項目體現在如右圖所示的解決方案結構中。如右圖所示,整個解決方案一共包含6個項目,上面介紹的作為「聯系人管理器」的單頁Web應用對應著項目WebApp,下面的列表給出了包括它在內的所有項目的類型和扮演的角色。·Common:這是一個空的類庫項目,僅僅定義了表示聯系人的數據類型而已。之所以將數據類型定義在獨立的項目中,只要是考慮到它會被多個項目(WebApi和ConsoleApp)所使用。WebApi:這是一個空的類庫項目,表現為HttpController類型的WebAPI就定義在此項目中,它具有對Common的項目引用。WebHost:這是一個空的ASP.NETWeb應用,它實現了針對ASP.NETWebAPI的WebHost寄宿,該項目具有針對WebApi的項目引用。SelfHost:這是一個空的控制台應用,旨在模擬ASP.NETWebAPI的SelfHost寄宿模式,它同樣具有針對WebApi的項目引用。WebApp:這是一個空的ASP.NETWeb應用,代表「聯系人管理器」的網頁就存在於該項目之中,至於具體的聯系人管理功能,自然通過以Ajax的形式調用WebAPI來完成。ConsoleApp:這是一個空的控制台應用,我們用它來模擬如何利用客戶端代理來實現對WebAPI的遠程調用,它具有針對Common的項目引用。二、定義WebAPI在正式定義WebAPI之前,我們需要在項目Common中定義代表聯系人的數據類型Contact。簡單起見,我們僅僅為Contact定義了如下幾個簡單的屬性,它們分別代表聯系人的ID、姓名、聯系電話、電子郵箱和聯系地址。1:publicclassContact2:{3:publicstringId{get;set;}4:publicstringName{get;set;}5:publicstringPhoneNo{get;set;}6:publicstringEmailAddress{get;set;}7:publicstringAddress{get;set;}8:}表現為HttpController的WebAPI定義在WebApi項目之中,我們一般將ApiController作為繼承的基類。ApiController定義在「System.Web.Http.dll」程序集中,我們可以在目錄「%ProgramFiles%\MicrosoftASP.NET\ASP.NETWebStack5\Packages\」中找到這個程序集。具體來說,該程序集存在於子目錄「Microsoft.AspNet.WebApi.Core.5.0.0\lib\net45」中。WebAPI體現在如下所示的ContactsController類型中。在該類型中,我們定義了Get、Post、Put和Delete這4個Action方法,它們分別實現了針對聯系人的查詢、添加、修改和刪除操作。Action方法Get具有一個表示聯系人ID的可預設參數,如果該參數存在則返回對應的聯系人,否則返回整個聯系人列表。由於ASP.NETWebAPI默認實現了Action方法與HTTP方法的映射,所以方法名也體現了它們各自所能處理請求必須採用的HTTP方法。1:publicclassContactsController:ApiController2:{3:staticListcontacts;4:staticintcounter=2;5:6:staticContactsController()7:{8:contacts=newList();9:contacts.Add(newContact{Id="001",Name="張三",10:PhoneNo="0512-12345678",EmailAddress="[email protected]",11:Address="江蘇省蘇州市星湖街328號"});12:contacts.Add(newContact{Id="002",Name="李四",13:PhoneNo="0512-23456789",EmailAddress="[email protected]",14:Address="江蘇省蘇州市金雞湖大道328號"});15:}16:17:publicIEnumerableGet(stringid=null)18:{19:returnfromcontactincontacts20:wherecontact.Id==id||string.IsNullOrEmpty(id)21:selectcontact;22:}23:24:publicvoidPost(Contactcontact)25:{26:Interlocked.Increment(refcounter);27:contact.Id=counter.ToString("D3");28:contacts.Add(contact);29:}30:31:publicvoidPut(Contactcontact)32:{33:contacts.Remove(contacts.First(c=>c.Id==contact.Id));34:contacts.Add(contact);35:}36:37:publicvoidDelete(stringid)38:{39:contacts.Remove(contacts.First(c=>c.Id==id));40:}41:}簡單起見,我們利用一個靜態欄位(contacts)表示存儲的聯系人列表。當ContactsController類型被載入的時候,我們添加了兩個ID分別為「001」和「002」的聯系人記錄。至於實現聯系人CRUD操作的Action方法,我們也省略了必要的驗證,對於本書後續的演示的實例,我們基本上也會採用這種「簡寫」的風格。

8. 人民郵電出版社出的那本ASP.NET從入門到精通光碟內容在那裡下載

可以到IT學習聯盟下載。但是這套教程只是基礎。要學會真正到aspnet就要一套完整的aspnet視頻教程。完整的aspnet教程可以看看IT學習聯盟網站的<<零基礎aspnet就業班>>。零基礎aspnet就業班包括aspnet基礎 進階 高級 項目。是一套完整的aspnet視頻教程。
………………………………………………

如果對aspnet感興趣,看看一個大專生怎麼自學aspnet到找到工作。
先做個自我介紹,我07年考上一所很爛專科民辦的學校,學的是生物專業,具體的學校名稱我就不說 出來獻丑了。09年我就輟學了,我在那樣的學校,一年學費要1萬多,但是根本沒有人學習,我實在看不 到希望,我就退學了。
退學後我也迷茫,大專都沒有畢業,我真的不知道我能幹什麼,我在糾結著我能做什麼。所以輟學後 我一段時間,我想去找工作,因為我比較沉默寡言,不是很會說話,我不適合去應聘做業務。我想應聘 做技術的,可是處處碰壁。
一次偶然的機會,我才聽到aspnet這個行業。那天我去新華書店,在計算機分類那邊想找本書學習 。後來有個女孩子走過來,問我是不是讀計算機的,有沒有興趣學習aspnet,然後給我介紹了一下 aspnet現在的火熱情況,告訴我學aspnet多麼的有前景,給我了一份傳單,aspnet培訓的廣告。聽了 她的介紹,我心裡癢癢的,確實我很想去學會一門自己的技術,靠自己的雙手吃飯。
回家後,我就上網查了下aspnet,確實是當今比較熱門的行業,也是比較好找工作的,工資也是相 對比較高。我就下決心想學aspnet了。於是我去找aspnet培訓的相關信息,說真的,我也很迷茫,我 不知道培訓是否真的能像他們宣傳的那樣好,所以我就想了解一段時間再做打算。
後來,我在網路知道看到一篇讓我很鼓舞的文章是一個aspnet高手介紹沒有基礎的朋友怎麼自學入 門學aspnet,文章寫的很好,包含了如何學習,該怎麼學習。他提到一個方法就是看視頻,因為看書實 在太枯燥和費解的,很多我們也看不懂。這點我真的很認同,我自己看書往往看不了幾頁。
我在想,為什麼別人都能自學成才,我也可以的!我要相信自己,所以我就想自學,如果實在學不會 我再去培訓。
主意一定,我就去搜索aspnet的視頻,雖然零星找到一些aspnet的視頻,但是都不系統,我是想找 一個能夠告訴我該怎麼學的視頻,一套從入門到精通的視頻,一個比較完整的資料,最好能有老師教, 不懂可以請教的。
後來我又找到一份很好的視頻,是在IT學習聯盟推出的一份視頻《零基礎aspnet就業班》(喜歡《 零基礎aspnet就業班》的可以復制 sina.lt/bsjr 粘貼瀏覽器地址欄按回車鍵即打開)
下面介紹下我的學習流程,希望對和我一樣完全沒有基礎的朋友有所幫助。
收到他們寄過來的光碟後,我就開始學習了,由於我沒有什麼基礎,我就從最簡單的C#語言視頻教程 學起,話說簡單,其實我還是很多不懂的,只要重復多看幾遍,就能看懂。C#語言我差不多學了一個禮 拜,接下來我就學了winform,SQL Server,html/css/javaScript,差不多也就三個禮拜。我每天都在不 停的寫一些簡單的代碼,這樣一月後我基本掌握了aspnet的全部基礎。
接下來開始學習aspnet高級課程,老師幽默風趣而又輕松的課堂教課,使我發現原來學習aspnet並 不是一件很難的事情。之前我把aspnet基礎學得還不錯,到了到了aspnet高級部分,我覺不又不是很 難,可能老師太牛了,他能把復雜的問題講的比較通俗易懂,有些難點的地方我還是連續看了五六次, 把他弄懂。每天下午6點下班後,吃了飯,馬上跑回家。看視頻,買了幾本筆記本。當時,為了編程還花幾百元了台二手的台式電腦,配置一般,但編程是足夠的。一邊看視頻,一邊記筆記,把重點都記下來,還一邊跟著老師敲代碼,為了能盡早學會aspnet。每天都堅持學5-6個小時。經常學到晚上一點多才睡覺。星期六,日不用上班,每天7點多起床,學到晚上11,12點。那段時間特別辛苦,特別累。在學習aspnet的三個多月里,除了吃飯睡覺工作,剩餘的時間都在學習,因為我知道自己的計算機基礎不是很好,也沒有學過什麼計算機,相對於那些科班的人來說我要比他們付出更多的努力。我只能咬緊牙關,堅持下去,我不能放棄,我要完成我的夢想,我要讓我的家人過上好日子。終於三個多月後我把aspnet教程里的內容和項目都學完了,在學項目的過程中我發現項目特別重要,他能把你學過的知識全部聯系起來,能更好的理解你所學的知識。還有學習過程中,動手很重要,要經常跟著老師動手敲,動手吧,跟著做,一行一行的跟著敲,再試著加一些自己的功能,按照自己的思路敲一些代碼,收獲遠比干聽大的多。 如果遇到暫時對於一些思路不能理解的,動手寫,先寫代碼,慢慢你就會懂了。
於是我就到51job瘋狂的投簡歷,因為我學歷的問題,專科沒有畢業,說真的,大公司沒有人會要我,所以我投的都是民營的小公司,我希望自己的努力有所回報。沒有想過幾天過後,就有面試了,但是第一次面試我失敗了,雖然我自認為筆試很好,因為我之前做了准備,但是他們的要求比較嚴格,需要有一年的項目經驗,所以我沒有被選中。
後來陸續面試了幾家公司,終於功夫不負有心人。我終於面試上的,是在閔行的一家民營的企業,公司規模比較小,我的職務是aspnet開發程序員,但我也比較滿足,開的工資是3500一個月,雖然我知道在上海3500隻能過溫飽的生活,但是我想我足夠了。我至少不用每天都要靠父母養,我自己也能養活自己的。我想只要我繼續努力,我工資一定會翻倍的。
把本文寫出來,希望能讓和我一樣的沒有基礎的朋友有信心,其實我們沒有必要自卑,我們不比別人笨,只要我們肯努力,我們一樣會成功。

…………………………………………