【问题标题】:ServiceStack return response syntax errorServiceStack 返回响应语法错误
【发布时间】:2016-12-09 03:17:52
【问题描述】:

我正在快速将 ServiceStack 升级到版本 4.5.4,但在尝试转换我的服务时遇到了问题。基本上我不能再将 sql 响应作为字符串返回。有谁知道这个的正确语法吗?

我已设法更改为新语法,但是我无法找到更改以下行的正确方法:

return new PostAccountResponse() { message = string.Format("{0}", 消息.值};

public object Post(Account.Model.Account request)
        {
            switch (request.Accounttype)
            {
                case "dview":
                    try
                    {
                        return dbFactory.Exec(dbCmd =>

                        {
                            dbCmd.CommandType = System.Data.CommandType.StoredProcedure;
                            dbCmd.CommandText = "stored procedure...";
                            dbCmd.Parameters.Add(new MySql.Data.MySqlClient.MySqlParameter("@mobile", request.mobile));
                            MySql.Data.MySqlClient.MySqlParameter message = new MySql.Data.MySqlClient.MySqlParameter("@message", "");
                            message.Direction = System.Data.ParameterDirection.Output;
                            dbCmd.Parameters.Add(message);
                            gender.Direction = System.Data.ParameterDirection.Output;
                            r = dbCmd.ExecuteReader();
                            return new PostAccountResponse() { message = string.Format("{0}", message.Value };
                        });
                    }
                    catch (Exception ex)
                    {
                       //
                    }
                    break;
            }
            return new object();

        }

有谁知道如何正确返回我的服务的响应?太感谢了。我尝试了以下方法,但也没有用:

    var rdr = dbCmd.ExecuteReader(CommandBehavior.CloseConnection);
                            var results = new List<Account.Model.PostAccountResponse>();
                            while (rdr.Read())
                            {
                                results.Add(new Account.Model.PostAccountResponse { message = string.Format("{0}", message.Value) });
                            }
return new PostAccountResponse { message = results };

更新 1

我正在尝试将服务升级到最新版本,但此新版本无法再编译代码。这就是我说的行不通的意思。编译器在 return new PostAccountResponse 行中抛出这些错误:

1.- 转换为 void 返回委托的匿名函数无法返回值。

2.- 无法将 lambda 表达式转换为预期的委托类型,因为块中的某些返回类型不能隐式转换为委托返回类型。

3.- 无法将类型“Account.Model.PostAccountResponse”隐式转换为“System.Data.IDbCommand”。存在显式转换(您是否缺少演员表?)

4.- 无法将类型“Account.Model.PostAccountResponse”隐式转换为“System.Threading.Tasks.Task”

【问题讨论】:

  • 您可以在 ServiceStack 服务中返回原始字符串,但作为一个好的设计,您的服务应该在所有代码路径中返回相同的响应类型。你也不应该返回object,如果你不想回复,你可以返回null。请更新您的问题,以明确您所说的“不起作用”是什么意思,包括任何异常堆栈跟踪,还请包括原始 HTTP 请求/响应标头,以便我们准确查看返回的内容与您的预期。跨度>
  • 感谢@mythz 的回复。请参阅更新的问题。我几年前写了这个服务,直到现在一直工作得很好。问题是我刚刚升级了 servicestack,这就是现在语法发生变化的原因。我只想了解我现在如何在我的服务上返回来自 MySQL 的响应。如果您对上述内容有任何想法,我将非常高兴听到,再次感谢

标签: c# servicestack ormlite-servicestack


【解决方案1】:

您应该在 using 语句中使用 DB 连接,而不是使用 dbFactory.Exec()

using (var db = dbFactory.OpenDbConnection())
using (var dbCmd = db.CreateCommand())
{
    dbCmd.CommandType = System.Data.CommandType.StoredProcedure;
    dbCmd.CommandText = "stored procedure...";
    dbCmd.Parameters.Add(new MySql.Data.MySqlClient.MySqlParameter("@mobile", request.mobile));
    MySql.Data.MySqlClient.MySqlParameter message = new MySql.Data.MySqlClient.MySqlParameter("@message", "");
    message.Direction = System.Data.ParameterDirection.Output;
    dbCmd.Parameters.Add(message);
    gender.Direction = System.Data.ParameterDirection.Output;
    r = dbCmd.ExecuteReader();
    return new PostAccountResponse() { message = string.Format("{0}", message.Value };
}

您在这里尝试使用原始 ADO.NET 连接来调用 MySql 存储过程,但通常当您使用 OrmLite APIs 访问数据库时,您可以直接使用 base.Db ADO.NET 连接,例如:

return Db.Select<Table>();

【讨论】:

  • 再次感谢@mythz,一个非常愚蠢的问题对不起,我用 using (var db = dbFactory.OpenDbConnection()) { 替换了 return dbFactory.Exec(dbCmd => { ... }。 .. } ,但是我遇到了一个错误 IDbConnection 不包含“CommandType”、“CommandText”和“Parameters”的定义。知道我做错了什么吗?:(
  • @carol1287 抱歉,我瞎了眼,你需要创建IDbCommand 看到更新的答案。
猜你喜欢
  • 2019-05-26
  • 1970-01-01
  • 2016-05-23
  • 2021-12-20
  • 1970-01-01
  • 2015-05-28
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多