RestfulApi 學習筆記——.net core入門操作(二)

前言

前面簡單介紹了一下restfulapi是什麼東西,那麼我們應該在.net core 中如何實現呢?或者說該怎麼做纔能有這個restful api呢?

正文

幸運的是.net core幫助我們實現了,restfulapi,但是不是強制性的,我們需要加上屬性ApiController,表示符合restful api規則。

這個也是非常常用的,那麼ApiController有什麼特性嗎?

1.要求使用屬性路由(attribute routing)

2.自動響應400。

3.推斷參數的綁定源

4.multipart/form-data 請求推斷

5.錯誤狀態的問題詳細信息

解釋一下,第一個屬性路由什麼意思呢?

[ApiController]
[Route("api/Companies")]
public class CompaniesController : ControllerBase

就是使用了ApiController就一定要使用Route("api/Companies"),當然他可以放在方法上,也可以放在類上。

這裏我們看到有些是這樣寫的:[Route("api/[Controller]")] 表示使用當前的類Companies作爲名字,但是一旦這個類名改變了,那麼api 也變了,所以這個可以寫死。

第二個自動響應400,這個400是什麼意思呢?是客戶端傳遞的參數不正確,不符合後臺規則,那麼就會自動返回400,這個後面解釋。

第三個推斷參數的綁定源,這個我們寫過的都明白,不解釋了。

第四個是什麼意思呢?第四個的意思是這樣的。

比如誰它自動推斷參數的綁定源,但是去哪裏獲取呢?是去body 裏面還是去form-data 裏面,還是去url鏈接上,這都是值得思考的問題。

那麼使用這個ApiController,都是從multipart/form-data 中獲取,其他的我們可以特殊表面,如下:

第五個可以返回錯誤詳情,這個是這樣的,如果錯誤了會返回一條鏈接,打開這條鏈接可以查看到具體錯誤,這個後面章節會介紹到。

這裏給個例子:

[Route("api/Companies")]
[ApiController]
public class CompaniesController : ControllerBase
{

	private readonly ICompanyRepository _companyRepository;

	public CompaniesController(ICompanyRepository companyRepository)
	{
		_companyRepository = companyRepository ?? throw new ArgumentException(nameof(companyRepository));
	}
	[HttpGet]
	public async Task<IActionResult> GetCompanies(CompanyDtoParameters parameters)
	{
		var companies = await _companyRepository.GetCompaniesAsync(parameters);
		return new JsonResult(companies);
	}

	[HttpGet("{companyId}")]
	public async Task<IActionResult> GetCompany(Guid companyId)
	{
		var company = await _companyRepository.GetCompanyAsync(companyId);
		if (company == null)
		{
			return NotFound();
		}
		return Ok(company);
	}
}

這裏有人就奇怪了,不是說好不能寫GetCompanies,然後我這裏還寫呢?

是這樣的,如果訪問這個api呢,get 請求,訪問的是getCompanies 這個方法,但是api是api/Companies。

因爲他是get請求,所以會請求到getCompanies,api/Companies 表示的是資源,而不是某個方法,這是要注意的地方。

這裏另外一個可能覺得奇怪的地方在於,你看 訪問api/Companies 調用GetCompanies 返回爲空,而api/Companies/1 調用GetCompany爲空的時候返回的404,爲啥區別待遇呢?

因爲別人在調用api/Companies的時候訪問的這個資源爲空,那麼這個資源裏面的東西爲空,但是這個殼子還在。

可以這麼理解,company 是一張表,表裏面是空的表還在,但是如果某條數據不在那麼就是這個資源沒有找到,看圖:

公司一是沒有盒子的,也就是說沒有容器,找不到就是沒有。

後續持續更新。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章