Привет всем, я использую этот новый 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](https://i.stack.imgur.com/NN1ZL.png)
И ручной запрос на MSSQL показываетданные:
![enter image description here](https://i.stack.imgur.com/Obtm6.png)
Так чего мне не хватает, так как он работает с той же базой данных в 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](https://i.stack.imgur.com/kxVoS.png)
Таким образом, вместо того, чтобы получить ошибку, она возвращает, но возвращает null .... что сноваэто не должно быть, так как я знаю, что он отправляет правильное значение и запрашивает вручную, что приводит к значениям ...
ОБНОВЛЕНИЕ 2
Мне кажется, что если я делаю:
string sql = "SELECT * FROM sAutomationOptionsSSRCC";
![enter image description here](https://i.stack.imgur.com/1jR45.png)
Возвращает значения очень хорошо.
Однако, когда я делаю ГДЕ :
![enter image description here](https://i.stack.imgur.com/Vy2St.png)
string sql = "SELECT * FROM sAutomationOptionsSSRCC where fnum = 'F5218471'";
Он ничего не возвращает, кроме NULL ???