Как выполнить POST и что вернуть с контроллера API
Я использую C# .net 4.5 для создания контроллера API, к которому будет подключаться мое веб-приложение. Этот контроллер затем отправляет данные в другой API.
Итак, у меня есть класс обслуживания:
public class PlayerServiceConnector()
{
private Uri baseUri;
private String UserName;
private String Password;
private string Name;
private string CharacterRace;
private string CharacterClass;
private string AutoSave;
}
public PlayerServiceConnector()
{
baseUri = new Uri("http://system/dev/API/characterGen");
UserName = "Joe";
Password = "12345";
//just for testing
Name = "Mighty Man";
CharacterRace = "Human";
CharacterClass = "Warrior";
AutoSave = true;
var path = baseUri + "/newCharacter";
// POST new character data to 3rd party character generating API
using (var wb = new WebClient())
{
wb.Credentials = new NetworkCredential(UserName, Password);
wb.Headers.Add("Authorization", "Basic " + authInfo);
var data = new NameValueCollection();
data["Name"] = Name;
data["CharacterRace"] = CharacterRace;
data["CharacterClass"] = CharacterClass;
data["AutoSave"] = AutoSave.ToString();
var response = wb.UploadValues(path, "POST", data);
}
}
И у меня есть.NET ApiController (System.Web.Http):
[Route("api/CharacterGeneration/createNew")]
public IHttpActionResult PostNewCharacter([FromBody] string value)
{
//create new instance of PlayerServiceConnector
var player = new PlayerServiceConnector();
//not sure what to do here...
//how do I get the WebClient part to POST in PlayerServiceConnector?
//what do I return?
return NoContent();
}
Моя проблема / вопрос заключается в том, что когда я указываю своему браузеру "api/CharacterGeneration/createNew", как мне убедиться, что данные отправлены и что я возвращаю клиенту? Вот где я в тупике и замешательстве.
Спасибо!
3 ответа
[Route("api/CharacterGeneration")]
public IHttpActionResult AddNewCharacter([FromBody] Character character)
{
if (character == null)
return BadRequest();
// put your code for adding the new character here
// either from your repository or db context
// return response of 201 if you created the resource successfully
// typically return this with a uri to the new resource
return Created("new location", characterYouCreated);
}
Что касается обратной части вашего вопроса, вы можете указать данные, которые вы разместили.
return Redirect(new Uri(url), HttpStatusCode.Created);
Где url будет URL для маршрута Get для получения данных, которые вы только что опубликовали.
var url = Url.Link("Name of your Get route", new object());
Ваш объект будет отличаться в зависимости от требований параметров вашего маршрута.
Пример кода, возвращающего список строк:
public IHttpActionResult PostNewCharacter([FromBody] string value)
{
var list = new List<string>();
list.Add("something");
list.Add("something else");
return Json(list);
}
работает в браузере, напечатает строку в структуре Json
запуск из вашего коннектора вернет структуру json, где вы сможете анализировать ваш прокси-класс.
если вы хотите, чтобы фреймворк анализировал Json, используйте http://www.newtonsoft.com/json или найдите newtonsoft на NuGet в Visual Studio. Все живы, я знаю, использовать newtonsoft для Json