【发布时间】:2017-05-05 09:23:27
【问题描述】:
我有这个 API,它调用一个存储过程来插入一个值,并且它在存储过程中几乎没有 PRINT 语句
public class ConfirmJobController : ApiController
{
[HttpPost]
public IHttpActionResult Post(JobConfirmation confirmation)
{
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
{
string outputMessage;
con.Open();
SqlCommand cmd = new SqlCommand("usp_PhoneApp_ConfirmBooking", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@p_jobId", confirmation.JobID);
cmd.Parameters.AddWithValue("@p_jobStatus", confirmation.JobStatus);
cmd.Parameters.AddWithValue("@p_createdDate", confirmation.CreatedDate);
cmd.ExecuteNonQuery();
con.InfoMessage += delegate (object sender1, SqlInfoMessageEventArgs e1)
{
outputMessage = e1.Message;
};
return outputMessage;
}
}
}
我想从存储过程中获取自定义消息到 API 的返回值。我怎样才能做到这一点?
目前 return outputMessage 行给出了“使用未分配的变量并且无法将字符串隐式转换为 IHttpActionResult”的错误
非常感谢任何帮助。
【问题讨论】:
-
这是两个非常不相关的问题。第一个是What does “Use of unassigned local variable” mean?的副本,第二个是Return a String in Web API 2的副本
-
您只是在回调中分配消息,因此,它没有被分配,编译器正确识别它只会在事件处理程序被命中后被分配。此外,字符串不是 IHttpActionResult,但是您可以返回(正确接收消息后)
Ok( outputMessage ) -
另外,像这样将控制器与数据访问混合在一起是不可能的,如果您再次需要相同的功能,这将导致代码重复和代码维护“地狱”
-
@Icepickle:虽然我原则上同意你的观点,但我认为我们不应该对此过于严厉。我可以很容易地看到自己为一个小的一次性或测试项目做同样的事情,并在项目增长并且我需要更多结构时进行重构。但是,是的,我通常也有服务。
-
@AlexPaven 虽然我同意对于小型项目来说,过于复杂的结构没有意义,但在我看来,许多东西已经可以用于其他请求(比如建立连接),我只是指出来 :) 不想成为龙 :)
标签: c# api asp.net-web-api