.net-core - 使用相同的参数 .NET Core Web API 将一个 POST 查询重定向到另一个
问题描述
我有 .NET Core Web API 应用程序。而且我有 3 个 API 端点:“/a”、“/b”、“/c”,它们接受相同的参数(带文件的表单参数)。
因此,用户确实请求“/a”,我检查了一些条件并需要将他重定向到具有相同(带文件的表单数据)参数的“/b”或“/c”。
重要的是:用户也可以单独执行“/b”或“/c”,而无需请求“/a”。另外我需要将用户重定向到“/a”内的“/b”或“/c”,所以我没有等待来自“/a”的响应,或者换句话说,来自“/a”的响应=重定向到其他端点.
有办法吗?
解决方案
您不能重定向到不同的 Web API 端点,但可以执行以下操作之一:
- 用户请求“/a”,您给他一个包含“/b”或“/c”的 URL/URL 的响应。
- 您已经实现了一项服务,并且您的控制器在逻辑上是干净的。因此,在控制器中,您只需检查应该调用“/a”、“/b”还是“/c”的服务方法。
编辑3:
我强烈推荐选项 2,因为您提到您有 3 个具有相同输入数据的控制器操作。所以你最好的方法是只有一个动作,在里面调用你的服务方法A
,B
或者C
取决于输入数据。
Edit2:
第一个选项伪代码:
[HttpPost("/a")]
public ActionResult<DefaultResponseModel> Verify(MyInputModel myModel)
{
MyResponse response = new MyResponse();
if(myModel.MyProperty1 == "something")
{
response.RedirectURL = "https://myurl/a"
}
else if(myModel.MyProperty1 == "other")
{
response.RedirectURL = "https://myurl/b"
}
else
{
response.RedirectURL = "https://myurl/c"
}
return Ok(respomse);
}
编辑:
如何执行第二个选项的示例。
在您Startup.cs
的方法中的文件中,ConfigureServices
您注册这样的服务:
services.AddTransient<IMyService, MyService>();
在您的控制器中,您通过依赖注入注入它:
public class BusinessController : ControllerBase
{
private readonly IMyService businessService;
public BusinessController(IMyService businessService)
{
this.businessService = businessService;
}
// the actions are below..
// code here
}
然后让我们在你想要的名为“/a”的动作中说
[HttpPost("/a")]
public ActionResult<DefaultResponseModel> Verify(MyInputModel myModel)
{
if(myModel.MyProperty1 == "something")
{
var response = this.businessService.A(myModel)
}
else if(myModel.MyProperty1 == "other")
{
var response = this.businessService.B(myModel)
}
else
{
var response = this.businessService.C(myModel)
}
}
不要忘记创建服务和实现。
public interface IMyService
{
ResponseModel A(MyInputModel myModel);
ResponseModel B(MyInputModel myModel);
ResponseModel C(MyInputModel myModel);
}
以及服务的实现:
public class MyService : IMyService
{
enter code here
}
推荐阅读
- crystal-reports - 从标题部分的详细信息部分获取最后一条记录
- matlab - 在 MATLAB 'cat' 命令中难以理解第三维
- python - 我可以解压变量以检查它们在另一个列表中的成员资格吗?
- spring-boot - 如果使用弹簧启动,我应该使用 spark-submit
- ios - 如何在所有视图的顶部添加 UIView
- bootstrap-4 - 有没有办法使用 css 自定义引导链接选择器日历?
- agda - 如何在 Agda 中创建一个“do”块
- javascript - 刷新页面后用户信息丢失(Firebase + React)
- python - 通过 for 循环将字典推送到列表
- ios - 如果需要处理函数,则无法将 alertController 移动到 UIViewController 扩展