[英]ASP.NET API routing
我正在研究 ASP.NET 5 API 並理解,為了使 API 盡可能“安靜”,我們使用 Http 動詞作為方法名稱。
我的問題是,如果我有多種方法來做不同的事情並且都必須是 HttpPost,會發生什么?
比方說,我可以調用一個方法來更新用戶的名字,也可以使用另一種方法來更新用戶的城市。 在這兩種情況下,輸入參數都是用戶 ID (GUID) 和字符串值。
[HttpPost("id")]
public void Post([FromRoute]id, [FromBody]firstName)
{
// Change user's first name
}
[HttpPost("id")]
public void Post([FromRoute]id, [FromBody]city)
{
// Change user's city
}
在這種情況下如何命名我的方法?
要擁有 2 個執行不同操作的 post 方法,請使用“ActionName”屬性。
[HttpPost("id")]
[ActionName("FirstNamePost")]
public void FirstNamePost([FromRoute]id, [FromBody]firstName)
{
// Change user's first name
}
[HttpPost("id")]
[ActionName("CityPost")]
public void CityPost([FromRoute]id, [FromBody]city)
{
// Change user's city
}
所以你會打電話給“www.mysite.com/api/citypost/1”或“www.mysite.com/api/FirstNamePost/1”
另一種選擇是只有一個 post 方法並添加第三個參數來區分名稱更新或城市更新。
你可以給控制器一個路由前綴
[RoutePrefix("Note")]
public class NoteController
然后為任何操作提供特定路線
[Route("", Name = "Note")]
[HttpGet]
public async Task<IHttpActionResult> Get (string tenantName, [FromBody] TagTdo entity)
[Route("", Name = "CreateNote")]
[HttpPost]
public async Task<IHttpActionResult> Post (string tenantName, [FromBody] NoteDto entity)
[Route("Update\{id}", Name = "UpdateNote")]
[HttpPut]
public async Task<IHttpActionResult> Put(string tenantName, [FromBody] NoteDto entity)
那么路線將是:
\Note [GET]
\Note [POST]
\Note\Update\4 [PUT]
同樣作為命名約定不要在路由中使用長名稱,用斜線和http動詞分成幾個詞
不要使用GetUserContacts
,使用User\\Contacts [GET]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.