WebAPI:在同一条路由上返回通用对象:它是 RESTFUL 吗? [关闭]

Posted

技术标签:

【中文标题】WebAPI:在同一条路由上返回通用对象:它是 RESTFUL 吗? [关闭]【英文标题】:WebAPI : Return Generic object on the same route : is it RESTFUL? [closed] 【发布时间】:2021-04-25 07:35:26 【问题描述】:

这里是技术背景:WebApi .NET Core 2.2 和 Angular

这是业务上下文:在 Angular 应用程序上,管理员用户可以打开特定流程:例如,“更改地址”或“更改银行帐户”。所有这些操作都会创建一个“流程”(如工作流)。

当用户通过任务管理处理请求时,他会在不同的屏幕上填写不同的数据,他可以部分或全部保存数据。

在 api 上,我希望有一个单一的路线来获取进程中“正在进行”的数据:

api/process/id/data

例如,如果进程是“ChangeAddress”,我将返回ChangeAddressDataModel 如果流程是“ChangeBankAccount”,我将返回 ChangeBankAccountDataModel

[HttpGet("process/id/data")]
public IActionResult GetProcessData()

    if(condition)
    
        return Ok(changeBankAccountModel);
    

    else if(conditon)
    
        return Ok(changeAddressModel);
    

Angular dev,可以获取流程的类型和模型。

我的问题是:是 REST 吗?我们可以在良好的约定中做到这一点吗?

如果不是,我应该为每种类型的流程创建一个路线吗?喜欢:

[HttpGet("process/id/change-address-data")] // return NoContent or NotFound if its a ChangeBankAccount process or something else
[HttpGet("process/id/change-bank-account-data")]

信息:我们将有 20 多个流程类型。

谢谢

【问题讨论】:

【参考方案1】:

您必须将输出转换为您要返回的对象

[HttpGet("process/id/data")]
public IActionResult GetProcessData()

    if(condition)
    
         //youe operations...
    
    else if(conditon)
    
        //youe operations...
    
    
    return Ok<ClassName>(result);

在 asp.net mvc 中你必须设置这个文件

public static class WebApiConfig

  public static void Register(HttpConfiguration config)
  
    config.MapHttpAttributeRoutes();
    config.Routes.MapHttpRoute(
      name: "DefaultApi",
      routeTemplate: "api/controller/action/id",
      defaults: new  id = RouteParameter.Optional 
   );
  

并且在文件 Global.asax.cs 中:

protected void Application_Start()

   GlobalConfiguration.Configure(WebApiConfig.Register);

查看最后这个链接:https://docs.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2

【讨论】:

不,他不能。这既不是由 REST 也不是由 OpenApi 强制执行的 当你说“他不能”时,你是什么意思?谢谢

以上是关于WebAPI:在同一条路由上返回通用对象:它是 RESTFUL 吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

接口上定义的 WebApi 属性路由

webapi简介及参数绑定

[Effective JavaScript 笔记]第51条:在类数组对象上复用通用的数组方法

在 Linux 操作系统上部署在 Azure 的 WebApi 项目找不到路由

C# Web API 405 方法没有路由到我的 PUT,总是点击我的 GET

Angular - 在 OnInit 上进行不同 API 调用的通用组件