前言:
此时你们对“aspnet网上选课源代码”大概比较关切,兄弟们都需要分析一些“aspnet网上选课源代码”的相关内容。那么小编也在网摘上汇集了一些关于“aspnet网上选课源代码””的相关知识,希望我们能喜欢,兄弟们快快来学习一下吧!在这一节中我们介绍HTTP另外的几种请求方式:
POST
PUT
DELETE
PATCH
新增MVC项目命名为AspNetCore.HttpClientWithHttpVerb,在该项目中我们新建一个api作为服务器端,在当前项目的HomeController中使用HttpClient来请求该api1.TodoItems api我们使用EFCore作为ORM并将数据存储到内存中,在Model文件夹下新增TodoItems类和TodoContext类:
在Program类中新增EF Core相关服务:
在Controllers文件夹下新增api命名为TodoItemsController并继承自ControllerBase
using AspNetCore.HttpClientWithHttpVerb.Models;using Microsoft.AspNetCore.Http;using Microsoft.AspNetCore.Mvc;using Microsoft.EntityFrameworkCore;using System.Collections.Generic;using System.Threading.Tasks;namespace AspNetCore.HttpClientWithHttpVerb.Controllers{ [ ] [ ] public class TodoItemsController : ControllerBase { private readonly TodoContext _context; public TodoItemsController(TodoContext context) { _context = context; } public async Task<IEnumerable<TodoItem>> Get() => await _context.TodoItems.AsNoTracking().ToListAsync(); [ ] public async Task<ActionResult<TodoItem>> Get(long id) { var request = HttpContext.Request; var todoItem = await _context.TodoItems.FindAsync(id); if (todoItem == ) { return NotFound(); } return todoItem; } [ ] public async Task<IActionResult> Post(TodoItem todoItem) { var request = HttpContext.Request; _context.TodoItems.Add(todoItem); await _context.SaveChangesAsync(); return RedirectToAction(nameof(Get), new { Id = todoItem.Id, todoItem }); } [ ] public async Task<IActionResult> Put(long id, TodoItem todoItem) { var request = HttpContext.Request; if (todoItem.Id != id) return BadRequest(); _context.Update(todoItem); await _context.SaveChangesAsync(); return NoContent(); } [ ] public async Task<IActionResult> Delete(long id) { var request = HttpContext.Request; var todoItem = await _context.TodoItems.FindAsync(id); if (todoItem == ) { return NotFound(); } _context.TodoItems.Remove(todoItem); await _context.SaveChangesAsync(); return NoContent(); } }}在这个类中我们定义常用的api包含增删改查2.HttpClient客户端
我们使用类型化方式声明HttpClient,在启动类中配置HttpClient
在Model文件夹下新增一个TodoClient类,在该类内部中使用构造函数中获取HttpClient,该类内部请求TodoItems api:
using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Http;using System.Text.Json;using System.Threading.Tasks;using Microsoft.EntityFrameworkCore;namespace AspNetCore.HttpClientWithHttpVerb.Models{ public class TodoClient { private static readonly JsonSerializerOptions _jsonSerializerOptions = new JsonSerializerOptions { IgnoreValues = true, PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; private readonly HttpClient _httpClient; public TodoClient(HttpClient httpClient) { _httpClient = httpClient; } public async Task<IEnumerable<TodoItem>> GetItemsAsync() { using var httpReponse = await _httpClient.GetAsync("/api/TodoItems"); httpReponse.EnsureSuccessStatusCode(); var stream = await httpReponse.Content.ReadAsStreamAsync(); return await JsonSerializer.DeserializeAsync<List<TodoItem>>(stream, _jsonSerializerOptions); } public async Task<TodoItem> GetItemAsync(long id) { using var httpResponse = await _httpClient.GetAsync($"/api/TodoItems/{id}"); if (httpResponse.StatusCode == HttpStatusCode.NotFound) return ; httpResponse.EnsureSuccessStatusCode(); var stream = await httpResponse.Content.ReadAsStreamAsync(); return await JsonSerializer.DeserializeAsync<TodoItem>(stream, _jsonSerializerOptions); } public async Task CreateItemAsync(TodoItem todoItem) { var todoItemJson = new StringContent( JsonSerializer.Serialize(todoItem, _jsonSerializerOptions), System.Text.Encoding.UTF8, "application/json"); using var httpResponse = await _httpClient.PostAsync("/api/TodoItems", todoItemJson); httpResponse.EnsureSuccessStatusCode(); } public async Task SaveItemAsync(TodoItem todoItem) { var todoItemJson = new StringContent( JsonSerializer.Serialize(todoItem, _jsonSerializerOptions), System.Text.Encoding.UTF8, "application/json" ); using var httpResponse = await _httpClient.PutAsync($"/api/TodoItems/{todoItem.Id}", todoItemJson); httpResponse.EnsureSuccessStatusCode(); } public async Task DeleteItemAsync(long id) { using var httpResponse = await _httpClient.DeleteAsync($"/api/TodoItems/{id}"); httpResponse.EnsureSuccessStatusCode(); } }}
在HomeController中通过调用HttpClient来请求api,并将请求的结果传给视图呈现:
源代码地址:
参考文献
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #aspnet网上选课源代码