發表文章

IHttpActionResult 使用範例

舊的作法 public HttpResponseMessage Delete ( int id ) { var status = _Repository . DeleteCustomer ( id ); if ( status ) { return new HttpResponseMessage ( HttpStatusCode . OK ); } else { throw new HttpResponseException ( HttpStatusCode . NotFound ); } } Web API 2 作法 public IHttpActionResult SomeAction () { IHttpActionResult response ; //we want a 303 with the ability to set location HttpResponseMessage responseMsg = new HttpResponseMessage ( HttpStatusCode . RedirectMethod ); responseMsg . Headers . Location = new Uri ( "http://customLocation.blah" ); response = ResponseMessage ( responseMsg ); return response ; }

ASP.NET Web API 將傳回的值轉換從控制器動作至 HTTP 回應訊息的方式。

Web API 控制器動作可以傳回下列其中一項: void HttpResponseMessage IHttpActionResult 其他類型 根據這些傳回時,Web API 會使用不同的機制來建立 HTTP 回應。 傳回型別 Web API 建立回應的方式 void 傳回空 204 (沒有內容) HttpResponseMessage 直接將轉換的 HTTP 回應訊息。 IHttpActionResult 呼叫 ExecuteAsync 來建立 HttpResponseMessage ,然後將轉換為 HTTP 回應訊息。 其他類型 將序列化的傳回值寫入至回應主體中;傳回 200 (確定)。 本主題的其餘部分描述更詳細的每個選項。 void 如果傳回的型別 void ,Web API 只會傳回空的 HTTP 回應狀態碼 204 (沒有內容)。 範例控制器: C# 複製 public class ValuesController : ApiController { public void Post ( ) { } } HTTP 回應: console 複製 HTTP/1.1 204 No Content Server: Microsoft-IIS/8.0 Date: Mon, 27 Jan 2014 02:13:26 GMT HttpResponseMessage 如果此動作會傳回 HttpResponseMessage ,Web API 轉換為傳回值直接 HTTP 回應訊息使用的屬性 HttpResponseMessage 來填入的物件回應。 此選項可讓您控制回應訊息很多。   例如,下列控制器動作設定 Cache-control 標頭。 C# 複製 public class ValuesController : ApiController { public HttpResponseMessage Get ( ) { HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, "value" );

非同步作業在網頁開發上的應用

舉例來說;如果我們的網站需要利用到 Web service 或 Web API 時,那就會有跨越網路資料延遲取得的問題,在這個時候就可以利用非同步作業的方式以改善執行的效能。 以 ASP.NET MVC網站為例 public async Task<ActionResult> DoAsync() {    ServiceClient.ServiceProxy = new ServiceClient();    return View(“View名稱”, await ServiceProxy.GetDataAsync()); } 呼叫多個Web服務 / WCF服務 / HTTP服務 public async Task<ActionResult> DoAsync() {    ServiceClient ServiceProxy = new ServiceClient();    ServiceClient1 ServiceProxy1 = new ServiceClient1();    var task = ServiceProxy.GetDataAsync();    var task1 = ServiceProxy1.GetDataAsync();    await Task.WhenAll(task, task1);    return View(“View名稱”, new DataModel(task.Result, task1.Result)); }

如何使用WEB API 搭配Entity Framework 將SQL Server DataBase中資料帶出

圖片
前置作業(資料庫部分): 先在資料庫中建立資料表並建立其資料。 create table Employees (     ID int primary key identity,     FirstName nvarchar(50),     LastName nvarchar(50),     Gender nvarchar(50),     Salary int ) go insert into Employees values('Mark','Hastings','Male',600000) insert into Employees values('Melo','Tang','Male',700000) insert into Employees values('James','Lebron','Male',800000) insert into Employees values('Mary','Jane','Female',600000) WEB API 部分:  Step 1:  先建立一個ASP.NET WEB API 專案 Step 2:  在新增另一個專案到同一個solution。 此專案主要是建立與資料庫溝通的EF(使用DataBase First)。 建立完成後solution explorer 會長這樣(一個是for EF 名稱為EmployeeDataAccess,另一個是WEB API)。 Step 3 : WEB API 專案引用 EF專案 WEB API 專案需要使用到EF專案,原因是因為要資料存取。 只需要在WEB API專案的REFERENCE 按下右鍵,選擇EF專案後加入即可。 Step 4: WEB API 專案新增Controller  public   class   EmployeesController  :  ApiController     {          //存取所有員工資料          public   IEnu

具有取消功能的非同步作業參考範例

利用cancellationtokensource 和 cancellationtoken 類別 執行非同步作業 private async Task TryTask() {    CancellationTokenSource source = new CancellationTokenSource();    source.CancelAfter(TimeSpan.FromSeconds(1)) ;    Task<int> task = Task.Run(() => slowFunc(1, 2, source.Token), source.Token);    await task; } 定義欲以非同步方式執行的工作 private int slowFunc(int a, int b, CancellationToken cancellationToken) {    for (int i = 0;  i < 20000; i++))       cancellationToken.ThrowIfCancellationRequested();    return a + b; }

[ASP.NET] 使用 configSections 自訂組態區段(web.config/app.config)

圖片
前言   在某些情況下我們可能會需要自定義組態檔(web.config / app.config)的設定,例如某些參數放在組態檔中取得或者使用依賴注入時用來定義類別等等...那實際上要怎麼去定義呢? 讓我們繼續看下去。 範例 Step 1 建立ConfigurationSection類別 先介紹幾個類別詞兒: ConfigurationSection : 代表組態中的區段,將會對應到組態檔中的 configSections 區段標簽。 ConfigurationSectionCollection : 代表組態檔中相關區段的集合。 ConfigurationElementCollection : 代表組態檔中相關項目的集合,例如可能定義一個A底下有A1,A2,A3。 ConfigurationElement : 代表組態檔中的項目,也就通常最後設定屬性的那個標簽。 ConfigurationProperty : Attribute,用來設定屬性或項目的子系。 大概了解以上這些類別功用後就要開始建立對應的類別讓之後能夠讀取操作,依照設定檔巢狀的關係將建立以下類別,首先專案必須加入 System.Configuration 參考並 using System.Configuration 命名空間。 1.建立TypeAliasesConfigurationElement類別並繼承ConfigurationElement後設定屬性 因之後我的設定字串需要使用到 name 跟 type 屬性,宣告 Name 與 Type 兩個 Property並且使用ConfigurationProperty設定屬性IsRequired標示為需要的屬性,如下: namespace TConfigurationSection.Configuration { public class TypeAliasesConfigurationElement : ConfigurationElement { [ConfigurationProperty( "name" , IsRequired = true )] public string Name { get