中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

WebApi系列(lie)~實(shi)際項目中(zhong)如(ru)何使用HttpClient向(xiang)web api發(fa)異步(bu)Get和Post請求并且參數于(yu)具體(ti)實(shi)體(ti)類型

回到目錄

本講比(bi)較實(shi)(shi)際,在WEB端有(you)一個(ge)(ge)Index和Create方(fang)法,用(yong)來從web api顯(xian)示實(shi)(shi)體(ti)列表數據和向api插入(ru)實(shi)(shi)體(ti)對象(xiang),這就是(shi)(shi)以往的網站,只不過是(shi)(shi)把數據持久化過程(cheng)放到(dao)了(le)web pai上(shang)面,它的優勢不用(yong)說(shuo),就是(shi)(shi)跨平臺,跨語言,這其(qi)實(shi)(shi)是(shi)(shi)restFul的功功,一切通(tong)訊(xun)都變(bian)得那(nei)個(ge)(ge)簡易,清(qing)晰!你再也不用(yong)引用(yong)程(cheng)序集(ji)了(le)...

先看一(yi)下實體的具體效果(guo)

我們看到如(ru)圖,它們在取數(shu)據(ju)和插數(shu)據(ju)的(de)(de)時間,走的(de)(de)都是(shi)(shi)restful標準,都是(shi)(shi)通過web api實現的(de)(de),當(dang)然,對于通訊來說(shuo),要求你(ni)的(de)(de)實體必(bi)須是(shi)(shi)可(ke)序(xu)列(lie)化的(de)(de),這是(shi)(shi)正常的(de)(de),而且(qie)對于EF來說(shuo),很容易辦這事,只要修改T4模版就可(ke)以搞定(ding)。

看一下具體web api代碼,采用unity實現的注入,后臺BLL層使用了cache機制,可以實現EntLib和redis兩種方式進行持久化,可以通過配置文件實現切換,對于數據持久化方式,實現了ef和redis的動態切換

Api代碼

    /// <summary>
    /// 用戶業(ye)務接(jie)口
    /// </summary>
    public class UserController : ApiController
    {
        IUserService userService;

        public UserController()
        {
            userService = ServiceLocator.Instance.GetService<IUserService>();
        }
        // GET api/user
        public IEnumerable<WebManageUsers> Get()
        {
            return userService.GetWebManageUsers(new PageParameters(1, 10));
        }

        // GET api/user/5
        public WebManageUsers Get(int id)
        {
            return userService.GetWebManageUser(i => i.ManageUserID == id);
        }

        // POST api/user
        public void Post([FromBody]WebManageUsers value)
        {
            userService.InsertManageUsers(value);
        }

        // PUT api/user/5
        public void Put(int id, [FromBody]WebManageUsers value)
        {
            var entity = userService.GetWebManageUser(i => i.ManageUserID == id);
            if (entity != null)
            {
                entity = value.MapTo<WebManageUsers>();
                userService.ModifyManageUsers(entity);
            }
        }

        // DELETE api/user/5
        public void Delete(int id)
        {
            userService.DeleteManageUsers(new WebManageUsers { ManageUserID = id });
        }
    }

Client端代碼,使(shi)用HttpClient實現(xian)異步通訊

    public class HomeController : Controller
    {
        private HttpClient client = new HttpClient();
        private string url = "//localhost:52824/api/user";
        private JsonMediaTypeFormatter formatter = System.Web.Http.GlobalConfiguration.Configuration.Formatters.Where(f =>
        {
            return f.SupportedMediaTypes.Any(v => v.MediaType.Equals("application/json", StringComparison.CurrentCultureIgnoreCase));
        }).FirstOrDefault() as JsonMediaTypeFormatter;

        public async Task<ActionResult> Index()
        {
            var data = await client.GetAsync(url);
            return View(data.Content.ReadAsAsync<IEnumerable<WebManageUsers>>());
        }

        public ActionResult Create()
        {
            return View();
        }
        [HttpPost]
        public async Task<ActionResult> Create(WebManageUsers entity)
        {
            entity.Password = string.Empty;
            entity.Status = 1;
            entity.CreateDate = DateTime.Now;
            entity.UpdateDate = DateTime.Now;
            entity.Description = string.Empty;
            entity.Operator = string.Empty;
            entity.RealName = string.Empty;
            entity.WebSystemID = 1;
            entity.DepartmentID = 1;
            var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };
            using (var http = new HttpClient(handler))
            {
                var response = await http.PostAsync<WebManageUsers>(url, entity, formatter);
                return RedirectToAction("Index");
            }
        }
    }

我(wo)們通過(guo)上面的例(li)子可以看到(dao),在client端與api進行通訊時,使用了(le)實(shi)體類(lei)型,并沒有進行JSON拼串,這(zhe)是(shi)友好的,事(shi)實(shi)上,這(zhe)個過(guo)程是(shi).net為(wei)我(wo)們實(shi)現了(le),當然你要首先指(zhi)定它的JSON持久化功能代碼,如圖

好了,對于基于實體(ti)的Web api通訊就說(shuo)到這里(li)了,感謝閱(yue)讀!

回到目錄

posted @ 2014-12-02 13:16  張占嶺  閱讀(10842)  評論(7)    收藏  舉報