Данные не удаляются с помощью API с сервера SQL в формах xamarin. HttpClient удалить - PullRequest
0 голосов
/ 24 января 2020

Я разрабатываю приложение Xamarin Forms, где мне нужно удалить запись из базы данных при нажатии кнопки сброса. У нас есть API, который выполняет действие.

Код выглядит следующим образом:

Код API

[HttpDelete]
public Response ResetRecord(string pk)
{
    try
    {
        Response response = new Response();

        using (var ctxdel = new GDSEntities4())
        {
            var result = ctxdel.SpDeleteRecordOnReset(int.Parse(pk));

            if (result > 0)
            {
                response.Message = result.ToString();
                response.Status = 1;                        
            }
            else
            {
                response.Message = "0";
                response.Status = 0;
            }
        }

        return response;
    }
    catch (Exception ex)
    {
        Response res = new Response();
        res.Message = ex.Message;
        res.Status = 0;
        return res;
    } 
}

Это работает, когда я проверяю с почтальоном. Во внешнем интерфейсе функция удаления выглядит следующим образом:

public async Task DeleteRecFromDB(string pk)//(, bool isNewItem = false) 
{
    try
    {
        HttpClient client = new HttpClient();
        Response response = new Response();
        string url = "http://xx.xxx.xxx.xxx/api/GDS/ResetRecord?PK={pk}";               

        var responseData = await client.DeleteAsync(url);

        if (responseData.IsSuccessStatusCode)
        {
            string result = await responseData.Content.ReadAsStringAsync();
            response = JsonConvert.DeserializeObject<Response>(result);

            var message = response.Message;
            var status = response.Status;

            await DisplayAlert("Success","Deleted from DB","OK");
        }
        else
        {
            await DisplayAlert("Failed", "Couldnt Delete from DB", "OK");
        }
    }
    catch (Exception)
    {
        UserDialogs.Instance.HideLoading();
        await DisplayAlert(LangResource.Message, LangResource.MsgWentWrong, LangResource.ok);
    }
}

Значение pk поступает в эту функцию DeleteRecFromDB, но я не могу найти, в чем проблема. Он выполняет Couldnt Delete from DB часть. Запись не удаляется из базы данных. Но хранимая процедура и API работают нормально. Я не могу удалить запись из внешнего интерфейса.

Ответ при проверке в почтальоне

{
    "Message": "0",
    "Status": 0
}

Моя хранимая процедура выглядит следующим образом:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[SpDeleteRecordOnReset]
    (@ID int)
AS
BEGIN
    DELETE FROM ProfMst 
    WHERE PK = @ID
END

1 Ответ

2 голосов
/ 24 января 2020

Предполагая, что pk равно 123, вы пытаетесь отправить запрос

DELETE /api/GDS/ResetRecord?PK=123 HTTP/1.1
Host: xx.xxx.xxx.xxx

В любом случае, фактический отправляемый вами запрос

DELETE /api/GDS/ResetRecord?PK={pk} HTTP/1.1
Host: xx.xxx.xxx.xxx

, потому что вы пропустили $ для строковой интерполяции в строке

string url = "http://xx.xxx.xxx.xxx/api/GDS/ResetRecord?PK={pk}";

Следовательно, url имеет значение http://xx.xxx.xxx.xxx/api/GDS/ResetRecord?PK={pk} вместо http://xx.xxx.xxx.xxx/api/GDS/ResetRecord?PK=123. Вы можете легко исправить это, изменив строку на

string url = $"http://xx.xxx.xxx.xxx/api/GDS/ResetRecord?PK={pk}";
...