Как выполнить 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

Другие вопросы по тегам