首页 > 解决方案 > 使用相同的参数 .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”的响应=重定向到其他端点.

有办法吗?

标签: .net-coreasp.net-core-webapi

解决方案


您不能重定向到不同的 Web API 端点,但可以执行以下操作之一:

  • 用户请求“/a”,您给他一个包含“/b”或“/c”的 URL/URL 的响应。
  • 您已经实现了一项服务,并且您的控制器在逻辑上是干净的。因此,在控制器中,您只需检查应该调用“/a”、“/b”还是“/c”的服务方法。

编辑3:

我强烈推荐选项 2,因为您提到您有 3 个具有相同输入数据的控制器操作。所以你最好的方法是只有一个动作,在里面调用你的服务方法AB或者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
}

推荐阅读