首页 > 解决方案 > 如何将 url 重定向到特定端点

问题描述

我需要在 Web 项目中添加一个 api 端点(=> WebSiteUrl/api/token)。

问题是这个项目已经有一个名为“ApiController”的基本控制器,它有多个动作。我不能使用这个控制器,因为它是基本控制器而不是 ApiController。

有没有办法设置 WebSiteUrl/api/token 端点,尽管已经有一个控制器正在使用路由 WebSiteUrl/api/actions ?

我已经创建了一个使用以下路由的 apicontroller:WebSiteUrl/api/controller/action

谢谢你的帮助 !

标签: c#asp.netasp.net-mvcapicontroller

解决方案


普通的 MVC 控制器实现 Controller,如果你想创建一个 API 控制器,你必须创建一个控制器来实现 ControllerBase 抽象类。

例如,一个 API 控制器看起来像,

[Route("api/[controller]")]
[ApiController]
public class ExampleController : ControllerBase
{
    [HttpGet('getall')]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }
    .......
}

我们可以从[Route()]属性中配置路由。这是命名控制器的约定,这里在“ExampleController”中将被视为该控制器名称的“Example”。

因此,根据路由属性([Route("api/[controller]")]),路径将是“websiteUrl/api/example”。[controller]标签将匹配任何控制器名称。因此,如果您将此控制器从 ExampleController 重命名为 TestController(您必须为控制器命名连接“Controller”,这就是系统将如何识别它),该控制器的路径将是“websieUrl/api/test”。否则,您可以将路由硬编码为[Route("api/example")],这样它就不会依赖于控制器名称。

根据您的要求,您可以做到,

[Route("api/token")]
[ApiController]
public class ExampleController : ControllerBase
{
    // GET: api/token/
    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }
}

因此,如果您对“websiteUrl/api/token”运行获取请求,它将指向此,

[HttpGet]
public IEnumerable<string> Get()
{
    return new string[] { "value1", "value2" };
}

如果想将 url 重定向到你想要的路径,然后去你项目上的 launchsettings.json,如果你使用的是 IISExpress,那么在配置文件里面的 json 文件中 - > IISExpress 设置 ""launchUrl": ""


推荐阅读