0

Я работаю над API ASP.NET 5 и понимаю, что для того, чтобы сделать API «спокойным», насколько это возможно, мы используем глаголы Http как имена методов.Маршрутизация API ASP.NET

Вопрос, что произойдет, если у меня есть несколько методов, которые делают разные вещи, и все они должны быть HttpPost?

Скажите, у меня есть метод, который я могу вызвать для обновления имени пользователя и может иметь другой метод, который я использую для обновления города пользователя. В обоих случаях входными параметрами будут идентификатор пользователя (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 
} 

Как назвать мои методы в этом случае?

+0

2 методы хороши, просто используйте атрибут маршруты, чтобы указать разные адреса. Являются ли они одним и тем же URL? – davidfowl

+0

Они могут быть, но им не обязательно быть. Я пытаюсь понять лучший способ справиться с этим. – Sam

+0

Вы можете использовать атрибут [ActionName ("")] – Hithesh

ответ

4

Чтобы иметь 2 способа публикации, которые делают разные вещи, используйте атрибут «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 и добавьте третий параметр для различения обновления имени или обновления города.

+1

Примечание: для именования вы будете искать/api/city/name (GET/POST), а не включать «сообщение» в URL-адрес ... –

-1

вы можете дать регулятора, маршрутное preffix

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

также как Именование преобразования DONT использует длинное имя в маршруте, тормозит до нескольких слов со слэшем и http-глаголом

не использовать «GetUserContacts», используйте «User \ Контакты [GET]»