2017-06-14 60 views
0

如何将的WebAPI行动执行后发送成功/失败响应的JSON我有一个名为FundTransfer功能,如何实现它像输出:下面如何在web api中发送json中的成功/失败消息? ?

FundTransfer(string FromAccountNo, string ToAccountNo, decimal Amount, 
    string Remarks) 

    Output: 
    return: Success OR Fail with reason 
    string MsgCode: 00 (means success) OR 11 (means failure) 
    string Message: "Insufficient Balance ... or any other reason" (if fail, 
    there must be some reason in the Message") 

给出。在那一刻,我称它为执行和全成执行发送真正

我的WebAPI行动(现在)

[HttpPost] 
    [ActionName("transfer")] 
    public IHttpActionResult FundTransfer([FromBody] FundTransfer transfer) 
    { 
     var transferData = BusinessLayer.Api.AccountHolderApi 
      .FundTransfer(transfer); 

     return Ok(transferData); 
    } 
的API

业务层

public static bool FundTransfer(FundTransfer transferData) 
    { 
     return 
     DatabaseLayer.Api.AccountHolderApi.FundTransfer(transferData); 
    } 

DatabaseLayer

public static bool FundTransfer(FundTransfer transferData) 
    { 

     string sql = @"SELECT * FROM sms.post_fund_transfer('" + 
     transferData.FromAccount + "','" + 
        transferData.ToAccount + "','" + transferData.Amount + 
     "','" + transferData.Statement + "')"; 

     using (var command = new NpgsqlCommand(sql)) 
     { 
      return DBOperations.ExecuteNonQuery(command); 
     } 
    } 

我仍然在学习的WebAPI并没有找到相关的响应消息的一些问题/答案,但不可能得到赞赏through.any帮助。

谢谢。

+1

我希望我不使用你的公司与该SQL注射:( – ATerry

+0

@ATerry S ire,没有公司,学生,学习..但不会伤害,如果你分享和启发我的SQL注入的事情?请。 – OLDMONK

+1

您正在传递一个命令到数据库作为SQL,你建立的SQL字符串使用未经清理的用户参数。所以如果我要例如传入“'); drop database sms;”进入FromAccount。告别你的短信数据库。始终使用参数。 “从sms.post_fund_transfer(@ param1,@ param2,@ param3)中选择*”。然后对每个参数使用新参数(“param1”,transferData.FromAccount),并对performtenonquery使用重载来分别传递查询和参数,而不是手动注入。我的例子可能会有点偏差,我不再使用sql。 – ATerry

回答

1

您可以创建持有的响应数据类型

public class responseMsg 
{ 
    public class MsgCode { get; set; } 
    public class Message { get; set; } 
} 

然后使用您的FundTransfer方法

public responseMsg FundTransfer(string FromAccountNo, string ToAccountNo, decimal Amount, string Remarks) 
{ 
    //implement logic and create a response 

    return new responseMsg { MsgCode = "11", Message="Insufficient Balance ..." }; 
} 

然后在API方法读取MsgCode并设置HTTP响应代码的类

[HttpPost] 
[ActionName("transfer")] 
public IHttpActionResult FundTransfer([FromBody] FundTransfer transfer) 
{ 
    //call your logic which response with the responseMsg 
    var response = logic(); 

    if(response.MsgCode == "11") 
    { 
     return Content(HttpStatusCode.BadRequest, response.Message); 
    } 
    else 
    { 
     return Ok(response.Message); 
    } 
}