【问题标题】:How to write a generic Web API function which can call any stored procedure如何编写可以调用任何存储过程的通用 Web API 函数
【发布时间】:2019-09-02 20:41:45
【问题描述】:

我想在 .NET CORE 2.1 (C#) 中编写一个控制器,它公开了一个 SINGLE 函数,该函数可用于调用 sql server 中的任何存储过程。

所以这个函数必须能够接受未定义参数的列表,并且它必须能够返回存储过程正在创建的数据集。

这可能吗?我是 Web API 的新手。我在 SQL Server 和 Windows 客户端中练习过,但我对 Web API 和 C# 后端一般来说是新手。

【问题讨论】:

  • 为什么要这样做?您可能实际上并没有... 似乎会产生许多安全问题。听起来您可能想研究 SSRS
  • 那么你到底想完成什么?我只是在努力想出一组要求,这将是一个很好的解决方案
  • 我的第一次尝试是接收一个 JsonObject,然后尝试反序列化为一个对象,直到它工作为止。但我不知道它是否会起作用。另一种解决方案是,您可以为请求参数创建一个对象,使用一个枚举来标识您可以接收的每个对象的类型和一个属性,您只需要确保前端将发送相同的格式。
  • @askolotl 您所询问的内容已经可以通过 OData 或 GraphQL 获得。 OData 服务器库可用于所有 .NET 堆栈。 GraphQL 通过第三方包得到支持,并且更受欢迎
  • @askolotl 在任何情况下,APEX 都是类似于旧 Oracle Forms 的 RAD 工具,而不是数据库访问 API。我敢打赌它也不使用单个函数来调用所有存储过程。它很可能使用类似 OData 的 API 在浏览器应用程序和服务器端服务之间进行数据通信

标签: c# sql-server asp.net-web-api asp.net-core-webapi


【解决方案1】:

与每个大问题一样,请考虑将其拆分。 你想要一个可以执行任何存储过程的方法。

执行存储过程需要什么?

  1. 它的名字
  2. 参数名称、类型和值列表
  3. 最后,您需要返回未指定的数据。

所以,找到一种方法来传递该数据,然后找到一种方法将所有数据转换为您的存储过程接受的东西,这取决于您使用什么来调用它,是直接 ADo.Net,是它是 Dapper,是 EF 等。

有可能吗?是的,当然,只要你能找到做这些事情的方法。

开始简单,首先是一个没有输入参数的存储过程。 让它工作,然后继续使用一个参数进行存储过程,看看情况如何。

您的第一个模型可能如下所示:

public class InputModel  
{
     public string StoredProcedureName {get;set;}     

     public List<StoredProcedureParameter> StoredProcedureParameters
}

然后添加参数部分:

public class StoredProcedureParameter 
{
    public string Name { get;set; }  
    public TypeEnum ParamType { get; set }
    public string Value { get;set; }
}

这是我如何处理它的一个示例。

现在我有了我的输入,我只需要将这些转换为用于 执行 sp。

一旦您设法执行了 sp,您就可以决定如何返回数据。您可以为此使用 dynamic 数据类型,API 会将其序列化为 JSON,因此您应该没有问题。

基本上一次一小步。是可以做到的,我过去也做过类似的事情。

【讨论】:

    猜你喜欢
    • 2022-08-12
    • 1970-01-01
    • 2021-02-11
    • 2011-02-20
    • 1970-01-01
    • 2016-12-13
    • 2021-10-29
    • 2021-09-23
    • 2018-07-14
    相关资源
    最近更新 更多