1. 程式人生 > >上手DocumentDB On Azure(四)

上手DocumentDB On Azure(四)

syn art ccf exceptio easy set man font crawl

因為同時學習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/>

正題:

  1. 添加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()方法.

  1. 添加Controller

    上一次第一次搞MongoDB時,不知道該添加哪個mode的controller,這次教程發現直接添加空的最合適.如下:

技術分享

裏邊無外乎就是UI的邏輯代碼,跟xaml.cs文件一個性質,返回的都是ActionResult類型,當然要異步的化就Task<ActionResult>.

通常情況下,返回值都時View.而且有特定View的(如Create,Edit,Detail,Delete),那麽方法都是成對出現的,應對的時2個請求,Request①應對的時頁面跳轉,Request②對應的是操作提交(HttpPost),示例如下:(註意,盡管[HttpType]Attribute提供了[HttpDelete]選項,但對應的不是我們默認的刪除操作,誤用的話會無法調用方法,還是使用[HttpPost])

技術分享

  1. 添加View

    逐步添加Index,Create,Edit.Deleted 4個View,方法如下:

    如果你跟我一樣對Asp.net不慎熟悉的化,這裏一定要註意,添加View的配置如下(尤其是使用布局頁:對Views/shared/_layout.cshtml的引用,同時不要創建分部視圖--雖然我不知道它是個啥)

技術分享

  1. 在Application_Start方法裏添加DocumentDBRepository初始化:

    註意是在Global.asax.cs文件中,相當於UWP的app.cs文件吧

技術分享

技術分享

  1. 改變默認首頁

技術分享

技術分享

原來默認的是controller="Home",打開的是Asp.Net介紹的網頁.

  1. 發布到Azure

    直接點發布就可以(不知道為什麽我的Url沒有被重新定義成功,還是當初的http://cosmosdbtestwebapp.chinacloudsites.cn)

技術分享

發布成功後在DashBoard上就能看到:

技術分享

技術分享

這個項目暫今天就到這了,明天試試如何用自己的Python寫個小爬蟲,來爬這個網頁!!

這個教程中給的static DocumentDBRepository<T> Model 非常 優雅,值得保存下來,以後都以此為準.

上手DocumentDB On Azure(四)