真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

[水煮ASP.NETWebAPI2方法論](1-5)ASP.NETWebAPIScaffolding(模板)

問(wèn)題

成都創(chuàng)新互聯(lián)公司專注于企業(yè)網(wǎng)絡(luò)營(yíng)銷推廣、網(wǎng)站重做改版、玉泉網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、商城開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為玉泉等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

  我們想快速啟動(dòng)一個(gè) ASP.NETWeb API解決方案。

 

解決方案

  APS.NET模板一開(kāi)始就支持 ASP.NETWeb API。使用模板往我們的項(xiàng)目中添加 Controller,在我們解決方案的 Controllers文件夾上右鍵,選擇“添加”->"Scaffolding"。

 即用模式,可以從下面選擇一個(gè):

  • Web API2 Controller

  • Web API2 Controller with      actions, using Entity Framework

  • Web API2 Controller with      read/write actions

  • Web API2 OData Controller      with action, using Entity Framwork

 另外,帶有屬性路由的基架模板可以從 NuGet中下載。Install-Package Microsoft.AspNet.WebApi.ScaffolderTemplates.AttributeRouting.CSharp

工作原理

  模板功能的全名是 ASP.NET模板(Scaffolding),他是一個(gè)基于T4模板的 ASP.NET代碼生成框架。T4(Text Template Transformation Toolkit),是一個(gè)代碼生成器模板,從 Visual Studio 2005開(kāi)始 T4模板就已經(jīng) Visual Studio的一部分了。

  Visual Studio 2013開(kāi)始對(duì)模板的支持更加出色,允許我們快速生成 ASP.NET應(yīng)用程序代碼。在 Visual Studio 2013更新 2上,一些更具擴(kuò)展性的功能點(diǎn)被添加進(jìn)來(lái),比如,模板的可定制化,這就讓我們使用他生成代碼的時(shí)候,更加靈活。

  內(nèi)建模板是被安裝在Visual Studio安裝文件夾中,我們可以在這里定制模板。例如,默認(rèn)安裝的情況下,模板是在

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Web\Mvc\Scaffolding\Templates中。需要注意的是,修改任何模板之后,修改變更帶來(lái)的影響就是全局的。如果想在每個(gè)項(xiàng)目的基礎(chǔ)上自定義模板,可以通過(guò)下面的兩種方式:

  • 安裝SideWaffle(sidewaffle.com),他是 Visual Studion模板管理的一個(gè)擴(kuò)展程序。然后,使用常規(guī)的“添加”對(duì)話框,然后選擇“Web”->“SideWaffle”->“ASP.NET      Scaffolding T4”。將會(huì)在解決方案的文件夾中創(chuàng)建一個(gè) “CodeTempplates”文件夾,包括所有全局模板的副本,就可以根據(jù)我們的項(xiàng)目需要來(lái)修改他。

  • 手動(dòng)的將所有全局模板復(fù)制到 ASP.NET項(xiàng)目中“CodeTemplates”(名字很重要)文件夾中,該文件夾是在項(xiàng)目的根目錄中的一個(gè)文件夾。這些模板的副本中包含 C#和 VB.NET模板,但是,我們可以根據(jù)需要進(jìn)行刪減。要確保文件這些文件已經(jīng)包含到項(xiàng)目中。

代碼
 讓我們演示一個(gè)Web API Controller Code-First使用基礎(chǔ)模板處理的例子。

模型展示如列表1-13。

 

列表1-13. EF Code-First

public class Team{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime FoundingDate { get; set; }
    public string LeagueName { get; set; }
}

 

  添加完模型之后,我們?cè)谔幚砟0鍖?duì)話框的時(shí)候,需要重新編譯項(xiàng)目。EF是依賴于我們項(xiàng)目應(yīng)用程序 DLL的反射。然后,選擇“添加”->“Scaffolding”->“Web API”->“Web API 2 Controller with actions,using Entity Framework”。對(duì)話框如圖1-3。

 [水煮 ASP.NET Web API2 方法論](1-5)ASP.NET Web API Scaffolding(模板)

 

圖1-3.添加模板模板對(duì)話框。

  可以按照?qǐng)D1-4的對(duì)話框來(lái)處理。必須許選擇一個(gè)模型,他是通過(guò)全名來(lái)限定的(這有一個(gè)可用的下拉框,會(huì)展示這個(gè)項(xiàng)所有的類),Entity Framework DataContext(如果有的話,會(huì)在下拉框中展示,也可以直接在這里創(chuàng)建)也是通過(guò)全名來(lái)限定,并且默認(rèn)的控制器名稱也是和模型名稱一樣。我們可以檢查“Use async controller actions”選擇框來(lái)強(qiáng)制模板引擎生成異步 action和使用 EF DataContext的異步方法。

  生成的Controller如清單 1-14(為了節(jié)省空間,沒(méi)并沒(méi)有貼出命名空間)。這是一個(gè)完全可以訪問(wèn)的 HTTP url,請(qǐng)求會(huì)被默認(rèn)路由識(shí)別匹配。這個(gè)創(chuàng)建的 Action(POST)將會(huì)響應(yīng) 201狀態(tài)碼給調(diào)用端,并包含一個(gè)指向最新創(chuàng)建資源定位的頭。這個(gè)更新的 Action(PUT)甚至可能處理一個(gè)潛在的異常 DbUpdateConcurrencyException.

清單 1-14.通過(guò)模板生成使用 EF Action的一個(gè) Web API Controller

public class TeamsController : ApiController{
    private Apre***ecipesWebApiContext db = new Apre***ecipesWebApiContext();
    // GET: api/Teams    public IQueryable GetTeams()
    {
        return db.Teams;
    }
    // GET: api/Teams/5    [ResponseType(typeof(Team))]
    public async Task GetTeam(int id)
    {
        Team team = await db.Teams.FindAsync(id);
        if (team == null)
        {
            return NotFound();
        }
        return Ok(team);
    }
    // PUT: api/Teams/5    [ResponseType(typeof(void))]
    public async Task PutTeam(int id, Team team)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }
        if (id != team.Id)
        {
            return BadRequest();
        }
        db.Entry(team).State = EntityState.Modified;
        try        {
            await db.SaveChangesAsync();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!TeamExists(id))
            {
                return NotFound();
            }
            else            {
                throw;
            }
        }
        return StatusCode(HttpStatusCode.NoContent);
    }
    // POST: api/Teams    [ResponseType(typeof(Team))]
    public async Task PostTeam(Team team)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }
        db.Teams.Add(team);
        await db.SaveChangesAsync();
        return CreatedAtRoute("DefaultApi", new { id = team.Id }, team);
    }
    // DELETE: api/Teams/5    [ResponseType(typeof(Team))]
    public async Task DeleteTeam(int id)
    {
        Team team = await db.Teams.FindAsync(id);
        if (team == null)
        {
            return NotFound();
        }
        db.Teams.Remove(team);
        await db.SaveChangesAsync();
        return Ok(team);
    }
    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            db.Dispose();
        }
        base.Dispose(disposing);
    }
    private bool TeamExists(int id)
    {
        return db.Teams.Count(e => e.Id == id) > 0;
    }
}

 現(xiàn)在,假設(shè)我們已經(jīng)按照“工作原理”部分描述的方式,在我們的解決方案中添加了基架模板。但是,我們還是希望可以按照自己的方式定義它。例如,強(qiáng)制所有新建的 ASP.NET Web Api控制器類繼承一個(gè)指定的基類,如清單 1-15所示。我們需要修改  CodeTemplates/ApiControllerEmpty文件夾中的 Controller.cs.t4文件,以確保每一個(gè)新的 Controller不再繼承自 ApiController,而是成為 ApiBaseController的子類,這是一個(gè)在大項(xiàng)目中典型的需求,因?yàn)楹芏?Web API開(kāi)發(fā)者喜歡采用自己的基類作為新的 Controller的基類。

清單1-15.通過(guò)模板強(qiáng)制新建的Web API Controller總是繼承自 ApiBaseController

<#@ template language="C#" HostSpecific="True" #>
<#@ output extension="cs" #>
<#@ parameter type="System.String" name="ControllerName" #>
<#@ parameter type="System.String" name="Namespace" #>
using System;using System.Collections.Generic;
using System.Linq;using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace <#= Namespace #>
{
    public class <#= ControllerName #> : ApiBaseController
    {
    }
}

  如果現(xiàn)在來(lái)“添加”->“Scaffolding”->“Web API”->“Web API2 Controller Empty”,生成的代碼如清單1-16所示,繼承自 ApiBaseController而不是 ApiCnotroller。

清單1-16.根據(jù)自定義模板生成的Controller

Listing 1-16. A Controller Generated from the Customized Scaffolding Template

using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Http;using System.Web.Http;namespace Apress.Recipes.WebApi.Controllers
{
    public class SampleController : ApiBaseController    {
    }
}

 我們可以在更廣泛的范圍去使用這個(gè)定制化的技術(shù),自定義命名空間,注入自己的服務(wù),或者強(qiáng)制 action是異步的。

 小提示不僅僅修改現(xiàn)有的,也可以添加新的,完全獨(dú)立的模板。我們可以在學(xué)習(xí)更多官方的 .NET Web Development和Tools小組的小組的博客,請(qǐng)戳這里

https://blogs.msdn.microsoft.com/webdev/2014/04/03/creating-a-custom-scaffolder-for-visual-studio/


當(dāng)前文章:[水煮ASP.NETWebAPI2方法論](1-5)ASP.NETWebAPIScaffolding(模板)
文章地址:http://weahome.cn/article/ghedge.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部