Что следует указать в контроллере веб-API? - PullRequest
0 голосов
/ 25 мая 2020

Я создал метод POST в своем API и вызываю его через Postman. Хотя все работает нормально и объект вставляется в базу данных, Postman дает мне код состояния HTTP 204 Нет содержимого - например, нет содержимого для вывода. При написании кода я предполагал, что он должен выводить созданный мной объект.

TitleController.cs

[HttpPost()]
public IActionResult InsertTitle([FromBody] GtlTitle gtlTitle)
{
    try
        {
            return Ok(_gtlTitleRepository.InsertTitle(gtlTitle));
        }
        catch(Exception e)
        {
            return BadRequest();
        }
}

IGtlTitleRepository.cs

GtlTitle InsertTitle(GtlTitle gtlTitle);

MockGtlTitleRepository.cs

public GtlTitle InsertTitle([FromBody] GtlTitle gtlTitle)
{

    using (var connection = new SqlConnection(_connection))
    {
        connection.Open();
        return connection.ExecuteScalar<GtlTitle>(@"INSERT INTO GTL_TITLE (ISBN, VolumeName, TitleDescription, PublicationDate, AuthorID, PublisherID, TempID) 
                                                        VALUES (@ISBN, @VolumeName, @TitleDescription, @PublicationDate, @AuthorID, @PublisherID, @TempID)",
                                                       new
                                                       {
                                                           gtlTitle.ISBN,
                                                           gtlTitle.VolumeName,
                                                           gtlTitle.TitleDescription,
                                                           gtlTitle.PublicationDate,
                                                           gtlTitle.AuthorID,
                                                           gtlTitle.PublisherID,
                                                           gtlTitle.TempID
                                                       });
    }
}

Что я делаю не так? Что я должен вернуть (и в каком контроллере), чтобы получить объект после завершения метода POST в Postman?

1 Ответ

1 голос
/ 25 мая 2020

вы ничего не возвращаете со своего SQL. Вероятно, вы захотите обновить свой SQL, чтобы вернуть вставленный идентификатор.

Вы можете сделать это так:

INSERT into GTL_TITLE <list of fields> VALUES <list of values>
SELECT SCOPE_IDENTITY();

Если вы хотите вернуть весь объект, вам нужно запустить дополнительный оператор выбора, используя ID, который вы только что вычислили

SELECT <list of fields> FROM GTL_TITLE 
WHERE your_primary_key_field = SCOPE_IDENTITY();

если вы прочтете документацию, вы увидите пример этого в действии:

https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.executescalar?view=dotnet-plat-ext-3.1

Я не делал SQL в некоторое время, поэтому это, вероятно, потребует некоторых обновлений синтаксиса.

Разделите это на 2 части.

  1. сначала получите простую SQL часть. Убедитесь, что вы можете вставлять объекты и вернуть вставленный идентификатор. Как только вы это сделаете, заставьте часть кода работать с простым идентификатором. Вы хотите попасть в положение, в котором вы запускаете код и получаете идентификатор обратно в свой код.

  2. Как только первая часть заработает, go немного сложнее и вернется весь объект повторяет ту же процедуру.

...