教程:使用 ASP.NET Core 创建 Web API
操作返回类型(ASP.NET Core Web API 中控制器操作的返回类型)
响应数据格式(ASP.NET Core Web API 中响应数据的格式)
Web API 2 的操作结果
创建数据传输对象 (DTO)
async 和 ASP.NET MVC
*
*
1、IHttpActionResult => json()
Json(T content)
Ok()
Ok(T content)
NotFound()
Content(HttpStatusCode statusCode, T value)
BadRequest()
Redirect(string location)
[HttpGet]
public IHttpActionResult GetAllGrade()
{
var result = Mapper.Map<List<GradeDto>>(_gradeRepo.GetList(x => x.Status != "D"));
return Json(result);
}
2、HttpResponseMessage 直接转换成HTTP响应消息
public HttpResponseMessage Get()
{
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode .OK, "hello");
response.Content = new StringContent ( "hello wep api", Encoding .Unicode);
response.Headers.CacheControl = new CacheControlHeaderValue
{
MaxAge = TimeSpan .FromSeconds(600)
};
return response;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
var response = new HttpResponseMessage()
{
Content = new StringContent(_value),
RequestMessage = _request
};
return Task.FromResult(response);
}
*
3、其它类型
将序列化后的返回值写入响应的正文(Response Body),并且返回 HTTP 状态码 200(OK)
*
*
4、async Task
// GET api/Books/5
[ResponseType(typeof(BookDetailDTO))]
public async Task<IHttpActionResult> GetBook(int id)
{
var book = await db.Books.Include(b => b.Author).Select(b =>
new BookDetailDTO()
{
Id = b.Id,
Title = b.Title,
Year = b.Year,
Price = b.Price,
AuthorName = b.Author.Name,
Genre = b.Genre
}).SingleOrDefaultAsync(b => b.Id == id);
if (book == null)
{
return NotFound();
}
return Ok(book);
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
var response = new HttpResponseMessage()
{
Content = new StringContent(_value),
RequestMessage = _request
};
return Task.FromResult(response);
}
*
asp.net mvc
public async Task<ActionResult> Index()
{
var departments = db.Departments.Include(d => d.Administrator);
return View(await departments.ToListAsync());
}
public async Task<ActionResult> Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Department department = await db.Departments.FindAsync(id);
if (department == null)
{
return HttpNotFound();
}
return View(department);
}
*
*
*
5、ASP.NET Core 提供以下 Web API 控制器操作返回类型选项
● 特定类型:如 string,自定义对象类型, IEnumerable<T>,IAsyncEnumerable<T>
● IActionResult:当操作中可能有多个 ActionResult 返回类型时,适合使用 IActionResult 返回类型
● ActionResult<T>
*
*
-------------------------------------ASP.NET Core-------------------------------------
特定类型:最简单的操作返回基元或复杂数据类型(如 string 或自定义对象类型)
操作均为非阻止性:返回 IEnumerable<T> 或 IAsyncEnumerable<T>,自 ASP.NET Core 3.0 起,前面两个操作均为非阻止性。
IActionResult: BadRequestResult (400)、NotFoundResult (404) 和 OkObjectResult (200)。
ActionResult<T>:
同步操作:
异步操作:
*
ControllerBase 类
下面是 ControllerBase 提供的方法的更多示例
*
绑定源参数推理
*
*
*
*
*
7*
*
*
8、
*
0、