簡體   English   中英

ASP.NET API 路由

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM