Member 14794855 Ответов: 3

Не код пути возвращают значение


public JsonResult Refunded(string activity, string DCID, string DCN, string from, string to, string remark, string rid, DateTime dor, string sts, string pid)
     {
         string merchantCode = string.Empty;
         string status = string.Empty;
         string code = string.Empty;
         var DOR = "";
         if (!string.IsNullOrEmpty(sts) && sts == "F")
         {
             DOR = dor.ToString("yyyyMMdd");
         }
         pid = pid.TrimEnd(',');
         rid = rid.TrimEnd(',');
         if (rid == "")
         {
             rid = "0";
         } Exception ex;
         var rowsF = CDbManager.ExecuteNonQuery("APConnection",
             @"UPDATE [Refund] SET [RefundedDate] = @dor, [RefundStatus] = @sts WHERE [Id] in (SELECT items FROM dbo.Split(@rid,','))",
             CommandType.Text,
             new Dictionary<string, object>
             {
                 {"@dor", DOR},
                 {"@sts", sts},
                 {"@rid", rid}
             },
             out ex);
         if (rowsF > 0){
             var sendMail = true;
             if (!string.IsNullOrEmpty(sts) && sts == "F")
             {
                 var listPID = pid.TrimEnd(',').Split(',');
                 var listRID = rid.TrimEnd(',').Split(',');

                 for (var j = 0; j < listPID.Length; j++)
                 {
                     sendMail = sendMail && SendMail(Convert.ToInt32(listPID[j]), Convert.ToInt32(listRID[j]));
                     if (((_merchantCode == "M17648") && (_merchantCode == "M27399_S0001")))
                     {
                         ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

                         ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
                         string backendpostPayid = getRefundPayId(Convert.ToInt32(listRID[j]), Convert.ToInt32(listPID[j]));
                         string MailStatus = string.Empty;
                         try
                         {
                             string QString = "getRefundPayId=" + backendpostPayid.ToString();

                             WebRequest request = WebRequest.Create(System.Configuration.ConfigurationManager.AppSettings["refund_backendpost_url"].ToString());
                             request.Method = "POST";

                             byte[] byteArray = Encoding.UTF8.GetBytes(QString);
                             request.ContentType = "application/x-www-form-urlencoded";
                             request.ContentLength = byteArray.Length;

                             Stream dataStream = request.GetRequestStream();
                             dataStream.Write(byteArray, 0, byteArray.Length);
                             dataStream.Close();
                             WebResponse response = request.GetResponse();
                             dataStream = response.GetResponseStream();
                             StreamReader reader = new StreamReader(dataStream);
                             string BackendStatus = reader.ReadToEnd();
                             reader.Close();
                             dataStream.Close();
                             response.Close();
                             if (string.IsNullOrEmpty(BackendStatus)) {
                                 this.DicParam.Clear();
                                 this.DicParam.Add("@Detail", "MHWebservice-BackendPostRefundNotSent:PayId:" + backendpostPayid.ToString() + "");
                                 CDbManager.ExecuteSP("APConnection", "sp_epay_InsertM2UTemp", this.DicParam);
                             } else if (BackendStatus == "BackendPostRefundSent")
                             {
                                 this.DicParam.Clear();
                                 this.DicParam.Add("@Detail", "MHWebservice-BackendPostRefundSent:PayId:" + backendpostPayid.ToString() + "|Status:" + BackendStatus.ToString());
                                 CDbManager.ExecuteSP("APConnection", "sp_epay_InsertM2UTemp", this.DicParam);
                             }

                         } catch (Exception ex1){
                             this.DicParam.Clear();
                             this.DicParam.Add("@Detail", "MHWebservice-BackendPostRefundNotSent:PayId:" + backendpostPayid.ToString() + "|Status:" + ex1.ToString());
                             CDbManager.ExecuteSP("APConnection", "sp_epay_InsertM2UTemp", this.DicParam);
                         }
                     }
                 }
             } else {
                 code = "0";
                 status = ex != null ? ex.Message : "Failed to connect to database.";
             } AuditTrail(activity, DCID, DCN, from, to, remark);
             return Json(new { code, status });
         } }

//Я столкнулся с этой ошибкой, из-за которой он не вернул значение.

Что я уже пробовал:

<pre><pre><pre>   public JsonResult Refunded(string activity, string DCID, string DCN, string from, string to, string remark, string rid, DateTime dor, string sts, string pid)
        {
            string merchantCode = string.Empty;
            string status = string.Empty;
            string code = string.Empty;
            var DOR = "";
            if (!string.IsNullOrEmpty(sts) && sts == "F")
            {
                DOR = dor.ToString("yyyyMMdd");
            }
            pid = pid.TrimEnd(',');
            rid = rid.TrimEnd(',');
            if (rid == "")
            {
                rid = "0";
            } Exception ex;
            var rowsF = CDbManager.ExecuteNonQuery("APConnection",
                @"UPDATE [Refund] SET [RefundedDate] = @dor, [RefundStatus] = @sts WHERE [Id] in (SELECT items FROM dbo.Split(@rid,','))",
                CommandType.Text,
                new Dictionary<string, object>
                {
                    {"@dor", DOR},
                    {"@sts", sts},
                    {"@rid", rid}
                },
                out ex);
            if (rowsF > 0){
                var sendMail = true;
                if (!string.IsNullOrEmpty(sts) && sts == "F")
                {
                    var listPID = pid.TrimEnd(',').Split(',');
                    var listRID = rid.TrimEnd(',').Split(',');

                    for (var j = 0; j < listPID.Length; j++)
                    {
                        sendMail = sendMail && SendMail(Convert.ToInt32(listPID[j]), Convert.ToInt32(listRID[j]));
                        if (((_merchantCode == "M17648") && (_merchantCode == "M27399_S0001")))
                        {
                            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

                            ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
                            string backendpostPayid = getRefundPayId(Convert.ToInt32(listRID[j]), Convert.ToInt32(listPID[j]));
                            string MailStatus = string.Empty;
                            try
                            {
                                string QString = "getRefundPayId=" + backendpostPayid.ToString();

                                WebRequest request = WebRequest.Create(System.Configuration.ConfigurationManager.AppSettings["refund_backendpost_url"].ToString());
                                request.Method = "POST";

                                byte[] byteArray = Encoding.UTF8.GetBytes(QString);
                                request.ContentType = "application/x-www-form-urlencoded";
                                request.ContentLength = byteArray.Length;

                                Stream dataStream = request.GetRequestStream();
                                dataStream.Write(byteArray, 0, byteArray.Length);
                                dataStream.Close();
                                WebResponse response = request.GetResponse();
                                dataStream = response.GetResponseStream();
                                StreamReader reader = new StreamReader(dataStream);
                                string BackendStatus = reader.ReadToEnd();
                                reader.Close();
                                dataStream.Close();
                                response.Close();
                                if (string.IsNullOrEmpty(BackendStatus)) {
                                    this.DicParam.Clear();
                                    this.DicParam.Add("@Detail", "MHWebservice-BackendPostRefundNotSent:PayId:" + backendpostPayid.ToString() + "");
                                    CDbManager.ExecuteSP("APConnection", "sp_epay_InsertM2UTemp", this.DicParam);
                                } else if (BackendStatus == "BackendPostRefundSent")
                                {
                                    this.DicParam.Clear();
                                    this.DicParam.Add("@Detail", "MHWebservice-BackendPostRefundSent:PayId:" + backendpostPayid.ToString() + "|Status:" + BackendStatus.ToString());
                                    CDbManager.ExecuteSP("APConnection", "sp_epay_InsertM2UTemp", this.DicParam);
                                }
                      
                            } catch (Exception ex1){
                                this.DicParam.Clear();
                                this.DicParam.Add("@Detail", "MHWebservice-BackendPostRefundNotSent:PayId:" + backendpostPayid.ToString() + "|Status:" + ex1.ToString());
                                CDbManager.ExecuteSP("APConnection", "sp_epay_InsertM2UTemp", this.DicParam);
                            }
                        }
                    }
                } else {
                    code = "0";
                    status = ex != null ? ex.Message : "Failed to connect to database.";
                } AuditTrail(activity, DCID, DCN, from, to, remark);
                return Json(new { code, status });
            } }

3 Ответов

Рейтинг:
2

Patrice T

Цитата:
Не код пути возвращают значение

Довольно простой
public JsonResult Refunded(string activity, string DCID, string DCN, string from, string to, string remark, string rid, DateTime dor, string sts, string pid)
     {
...
         if (rowsF > 0){ // (1) if this test fail,
             var sendMail = true;
             if (!string.IsNullOrEmpty(sts) && sts == "F")
             {
...
             } else {
                 code = "0";
                 status = ex != null ? ex.Message : "Failed to connect to database.";
             } AuditTrail(activity, DCID, DCN, from, to, remark);
             return Json(new { code, status }); // (2) this return is skipped
         }
    // (3) and there is no return value here
     }

Совет: никогда не сохраняйте строки в исходном коде, это экономит 1 ключевой штрих за счет читабельности кода.
} else { // never do this, it only makes your code more difficult to read.
    code = "0";
    status = ex != null ? ex.Message : "Failed to connect to database.";
} AuditTrail(activity, DCID, DCN, from, to, remark); // never do this, it only makes your code more difficult to read.

Научитесь правильно делать отступы в вашем коде, это покажет его структуру, и это поможет чтению и пониманию. Это также помогает выявлять структурные ошибки.
Стиль отступа - Википедия[^]

Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]


0x01AA

+5

Patrice T

Спасибо

Рейтинг:
2

Dave Kreskowiak

Проблема вызвана тем, что ваш код настолько плохо отформатирован, что вы не можете видеть, что он делает. Очистите форматирование, и станет совершенно очевидно, в чем проблема. В приведенном ниже переформатированном коде посмотрите на первый оператор "if", а затем комментарии, которые я добавил в нижней части кода.

Честно говоря, этот код-катастрофа со многими проблемами. Код в этом методе должен быть разбит на несколько методов, каждый из которых выполняет гораздо меньшую "вещь". Ваш существующий код метода делает слишком много, например, выполняет работу с базой данных, публикует веб-метод, среди прочего, чтобы его можно было легко понять. Упростите то, что делает этот метод, и разбейте фрагменты кода на другие методы. Метод должен делать одно и только одно. Если это означает метод, который должен вызывать другие методы, чтобы заставить их что-то сделать, например отправить сообщение на URL-адрес, то это то, что вы должны сделать.

У вас также есть "магические числа", которые не имеют определенного для них значения, например "M17648". Замените их константами со значимыми именами.

Это весь ваш метод "возврата" :

public JsonResult Refunded(string activity, string DCID, string DCN, string from, string to, string remark, string rid, DateTime dor, string sts, string pid)
{
    string merchantCode = string.Empty;
    string status = string.Empty;
    string code = string.Empty;
    var DOR = "";

    if (!string.IsNullOrEmpty(sts) && sts == "F")
    {
        DOR = dor.ToString("yyyyMMdd");
    }

    pid = pid.TrimEnd(',');
    rid = rid.TrimEnd(',');

    if (rid == "")
    {
        rid = "0";
    }

    Exception ex;

    var rowsF = CDbManager.ExecuteNonQuery("APConnection",
         @"UPDATE [Refund] SET [RefundedDate] = @dor, [RefundStatus] = @sts WHERE [Id] in (SELECT items FROM dbo.Split(@rid,','))",
         CommandType.Text,
         new Dictionary<string, object>
         {
         {"@dor", DOR},
         {"@sts", sts},
         {"@rid", rid}
         },
         out ex
    );

    if (rowsF > 0)
    {
        var sendMail = true;

        if (!string.IsNullOrEmpty(sts) && sts == "F")
        {
            var listPID = pid.TrimEnd(',').Split(',');
            var listRID = rid.TrimEnd(',').Split(',');

            for (var j = 0; j < listPID.Length; j++)
            {
                sendMail = sendMail && SendMail(Convert.ToInt32(listPID[j]), Convert.ToInt32(listRID[j]));

                if (((_merchantCode == "M17648") && (_merchantCode == "M27399_S0001")))
                {
                    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

                    ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

                    string backendpostPayid = getRefundPayId(Convert.ToInt32(listRID[j]), Convert.ToInt32(listPID[j]));

                    string MailStatus = string.Empty;

                    try
                    {
                        string QString = "getRefundPayId=" + backendpostPayid.ToString();

                        WebRequest request = WebRequest.Create(System.Configuration.ConfigurationManager.AppSettings["refund_backendpost_url"].ToString());
                        request.Method = "POST";

                        byte[] byteArray = Encoding.UTF8.GetBytes(QString);
                        request.ContentType = "application/x-www-form-urlencoded";
                        request.ContentLength = byteArray.Length;

                        Stream dataStream = request.GetRequestStream();
                        dataStream.Write(byteArray, 0, byteArray.Length);
                        dataStream.Close();
                        WebResponse response = request.GetResponse();
                        dataStream = response.GetResponseStream();
                        StreamReader reader = new StreamReader(dataStream);
                        string BackendStatus = reader.ReadToEnd();
                        reader.Close();
                        dataStream.Close();
                        response.Close();
                        if (string.IsNullOrEmpty(BackendStatus))
                        {
                            this.DicParam.Clear();
                            this.DicParam.Add("@Detail", "MHWebservice-BackendPostRefundNotSent:PayId:" + backendpostPayid.ToString() + "");
                            CDbManager.ExecuteSP("APConnection", "sp_epay_InsertM2UTemp", this.DicParam);
                        }
                        else if (BackendStatus == "BackendPostRefundSent")
                        {
                            this.DicParam.Clear();
                            this.DicParam.Add("@Detail", "MHWebservice-BackendPostRefundSent:PayId:" + backendpostPayid.ToString() + "|Status:" + BackendStatus.ToString());
                            CDbManager.ExecuteSP("APConnection", "sp_epay_InsertM2UTemp", this.DicParam);
                        }

                    }
                    catch (Exception ex1)
                    {
                        this.DicParam.Clear();
                        this.DicParam.Add("@Detail", "MHWebservice-BackendPostRefundNotSent:PayId:" + backendpostPayid.ToString() + "|Status:" + ex1.ToString());
                        CDbManager.ExecuteSP("APConnection", "sp_epay_InsertM2UTemp", this.DicParam);
                    }
                }
            }
        }
        else
        {
            code = "0";
            status = ex != null ? ex.Message : "Failed to connect to database.";
        }
        AuditTrail(activity, DCID, DCN, from, to, remark);
        return Json(new { code, status });
    }

    // If the "(rowsF > 0)" if statement fails, you
    // end up here with no return statement to return
    // anything to the caller.
}


Рейтинг:
1

RickZeeland

Если вы имеете в виду ошибку "не все пути кода возвращают значение", то вы, вероятно, упускаете оператор return.
Видеть: c# возвращает ошибку "не все пути кода возвращают значение" - переполнение стека[^]