Dapper GET работает, но POST не получает данные - возвращает Sequence, не содержит элементов - PullRequest
1 голос
/ 13 июня 2019

Привет всем, я использую этот новый Dapper framework для моего C # API-кода.

Я использую CRUD API и мой GET команда, которая использует Dapper, прекрасно работает (IAPI) :

public class ChromeExtData
{
    public string fnum { get; set; }
    public string noty { get; set; }
    public string ffl { get; set; }
    public string code { get; set; }
    public string lname { get; set; }
    public string fname { get; set; }
    public string mname { get; set; }
    public string numsr { get; set; }
    public string sor { get; set; }
    public string pob { get; set; }
    public string sex { get; set; }
    public string birthday { get; set; }
    public string ethnicity { get; set; }
    public string race { get; set; }
    public string cstatus { get; set; }
    public string miscnumbers { get; set; }
    public string transp { get; set; }
}

[ServiceContract(Namespace = "")]
public interface IAPI
{
    [OperationContract]
    void DoWork();

    [OperationContract]
    [WebInvoke(Method = "GET",
               UriTemplate = "getall",
               ResponseFormat = WebMessageFormat.Json,
               BodyStyle = WebMessageBodyStyle.Bare)]
    Task<ChromeExtData> getall();

    [OperationContract]
    [WebInvoke(Method = "POST",
               UriTemplate = "Fnum",
               RequestFormat = WebMessageFormat.Json,
               ResponseFormat = WebMessageFormat.Json,
               BodyStyle = WebMessageBodyStyle.Bare)]
    Task<ChromeExtData> Fnum(string FNum);
}

и другие API :

public class API : IAPI
{
    public void DoWork()
    {
    }

    public async Task<ChromeExtData> getall()
    {
        ChromeExtData _chromeExtData = new ChromeExtData();

        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnectionString"].ToString()))
        {
            await conn.OpenAsync();
            _chromeExtData = await conn.QuerySingleAsync<ChromeExtData>("SELECT * FROM sAutomationOptionsSSRCC", null);
        }

        return _chromeExtData;
    }

    public async Task<ChromeExtData> Fnum(string FNum)
    {
        try
        {
            using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnectionString"].ToString()))
            {
                await conn.OpenAsync();
                _chromeExtData = await conn.QuerySingleAsync<ChromeExtData>(
                                            "SELECT * FROM sAutomationOptionsSSRCC WHERE fnum = @fNum",
                                            new { fNum = FNum }
                                       );
            }
        }
        catch (Exception ex) {
            System.Diagnostics.Debug.WriteLine(ex.Message);
        }

        return _chromeExtData;
    }
}

И я звоню Функция getall из AJAX :

function getALL() {
    $.ajax({
        url: "Service/API.svc/getall",
        type: "GET",
        dateType: "json",
        success: function (result) {
            console.log(result);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            console.log(xhr.status);
            console.log(thrownError);
        }
    });
}

, которая производит:

{birthday: "21.05.2009 ", код:" qTest ", cstatus:" F ", fnum:" F5218471 ", ff2l:" 147210123 ",…}

Однако при попытке запустить POST код, который выдает эту ошибку при перехвате:

Последовательность не содержит элементов

Мой вызов ajax для POST :

function fNumber() {
    $.ajax({
        url: "Service/NNicsAPI.svc/Fnum",
        type: "POST",
        data: JSON.stringify({ FNum: "F5218471" }),
        dataType: "json",
        contentType: "application/json",
        success: function (result) {
            alert(result);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            console.log(xhr.status);
            console.log(thrownError);
        }
    });
}

И я знаю, что оно отправляет значение для fNum:

enter image description here

И ручной запрос на MSSQL показываетданные:

enter image description here

Так чего мне не хватает, так как он работает с той же базой данных в GET звоните, но ничего не возвращаете для POST ?

UPDATE 1

Использование этого:

try
{
    using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnectionString"].ToString()))
    {
        await conn.OpenAsync();
        _chromeExtData = await conn.QueryFirstOrDefaultAsync<ChromeExtData>(
                                 "SELECT * FROM sAutomationOptionsSSRCC WHERE fnum = @fNum",
                                 new { fNum = FNum }
                               );
   }
}
catch (Exception ex) {
    System.Diagnostics.Debug.WriteLine(ex.Message);
}

return _chromeExtData;

Я получаю это:

enter image description here

Таким образом, вместо того, чтобы получить ошибку, она возвращает, но возвращает null .... что сноваэто не должно быть, так как я знаю, что он отправляет правильное значение и запрашивает вручную, что приводит к значениям ...

ОБНОВЛЕНИЕ 2

Мне кажется, что если я делаю:

string sql = "SELECT * FROM sAutomationOptionsSSRCC";

enter image description here

Возвращает значения очень хорошо.

Однако, когда я делаю ГДЕ :

enter image description here

string sql = "SELECT * FROM sAutomationOptionsSSRCC where fnum = 'F5218471'";

Он ничего не возвращает, кроме NULL ???

...