WebAPI:在同一路由上返回通用对象:它是RESTFUL吗?



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

下面是业务上下文:在angular应用程序中,admin用户可以打开一个特定的进程:例如,"更改地址"或"更改银行账户"。所有这些动作创建了一个"过程"。(像一个工作流)。

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

在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,可以获取进程的类型和cast模型。

我的问题是是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+进程类型。

谢谢

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

[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://learn.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2

相关内容

最新更新