上手DocumentDB On Azure(四)
因為同時學習python crawler,所以臨時決定把asp.net app的部分先拿出來,順便學習和熟練DoucmentDB相關知識.
本節教程參考:
| ASP.NET MVC 教程:使用 DocumentDB 開發 Web 應用程序 來自 <https://www.azure.cn/documentation/articles/documentdb-dotnet-application/> |
準備工作包括:
- 確保你已經有了Azure賬戶;
- 在你的Azure上已經有可供使用的DocumentDB賬戶;
- VS已加載用於連接Azure的 Azure .NET SDK for VS 2017;
- 新建Asp.Net MVC項目;
- Nuget添加NewtonSoft.Json包和Azure DocumentDB Client包;
一點小插曲,VS2017目前還不支持世紀互聯的賬號,解決辦法
| VS2017 直接使用賬戶登錄 Azure 來自 <https://www.azure.cn/documentation/articles/aog-portal-management-qa-vs2017-login/> |
正題:
添加Model
- 添加Item.cs
這個很簡單了,按照教程上直接Copy都可以
- 添加DocumentRepository.cs
下邊是教程中給出的代碼
其中where語句參見:泛型約束語句where T:class
而ConfigurationManager.AppSettings["KeyIndex"]其實就是一個KeyValueCollection,指向的是Web.config文件中的<AppSettings>
public static class DocumentDBRepository<T> where T : class { private static readonly string DatabaseId = ConfigurationManager.AppSettings["database"] private static readonly string CollectionId = ConfigurationManager.AppSettings["collection"]; private static DocumentClient client;
public static void Initialize() { client = new DocumentClient(new Uri(ConfigurationManager.AppSettings["endpoint"]), ConfigurationManager.AppSettings["authKey"]); CreateDatabaseIfNotExistsAsync().Wait(); CreateCollectionIfNotExistsAsync().Wait(); }
private static async Task CreateDatabaseIfNotExistsAsync() { try { await client.ReadDatabaseAsync(UriFactory.CreateDatabaseUri(DatabaseId)); } catch (DocumentClientException e) { if (e.StatusCode == System.Net.HttpStatusCode.NotFound) { await client.CreateDatabaseAsync(new Database { Id = DatabaseId }); } else { throw; } } }
private static async Task CreateCollectionIfNotExistsAsync() { try { await client.ReadDocumentCollectionAsync(UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId)); } catch (DocumentClientException e) { if (e.StatusCode == System.Net.HttpStatusCode.NotFound) { await client.CreateDocumentCollectionAsync( UriFactory.CreateDatabaseUri(DatabaseId), new DocumentCollection { Id = CollectionId }, new RequestOptions { OfferThroughput = 1000 }); } else { throw; } } } } |
之後還要陸續為DocumentDBRepository添加增改刪查的方法,教程裏都有.
哦,刪除沒有,但原理同改的方法,只不過調用的是client.DeleteDocumentAsync()方法.
添加Controller
上一次第一次搞MongoDB時,不知道該添加哪個mode的controller,這次教程發現直接添加空的最合適.如下:
裏邊無外乎就是UI的邏輯代碼,跟xaml.cs文件一個性質,返回的都是ActionResult類型,當然要異步的化就Task<ActionResult>.
通常情況下,返回值都時View.而且有特定View的(如Create,Edit,Detail,Delete),那麽方法都是成對出現的,應對的時2個請求,Request①應對的時頁面跳轉,Request②對應的是操作提交(HttpPost),示例如下:(註意,盡管[HttpType]Attribute提供了[HttpDelete]選項,但對應的不是我們默認的刪除操作,誤用的話會無法調用方法,還是使用[HttpPost])
添加View
逐步添加Index,Create,Edit.Deleted 4個View,方法如下:
如果你跟我一樣對Asp.net不慎熟悉的化,這裏一定要註意,添加View的配置如下(尤其是使用布局頁:對Views/shared/_layout.cshtml的引用,同時不要創建分部視圖--雖然我不知道它是個啥)
在Application_Start方法裏添加DocumentDBRepository初始化:
註意是在Global.asax.cs文件中,相當於UWP的app.cs文件吧
改變默認首頁
原來默認的是controller="Home",打開的是Asp.Net介紹的網頁. |
發布到Azure
直接點發布就可以(不知道為什麽我的Url沒有被重新定義成功,還是當初的http://cosmosdbtestwebapp.chinacloudsites.cn)
發布成功後在DashBoard上就能看到:
這個項目暫今天就到這了,明天試試如何用自己的Python寫個小爬蟲,來爬這個網頁!!
這個教程中給的static DocumentDBRepository<T> Model 非常 優雅,值得保存下來,以後都以此為準.
上手DocumentDB On Azure(四)