问题描述
我需要在Web项目(=> WebSiteUrl / api / token)中添加api端点。
问题在于该项目已经具有一个名为“ ApiController”的基本控制器,该控制器具有多个操作。我不能使用此控制器,因为它是基本控制器,而不是ApiController。
尽管事实上已经有一个使用WebSiteUrl / api / actions路由的控制器,但是有没有办法设置WebSiteUrl / api / token端点?
我已经创建了一个使用以下路由的apicontroller:WebSiteUrl / api / controller / action
感谢您的帮助!
解决方法
普通的MVC控制器实现了Controller,如果要创建API控制器,则必须创建一个将实现ControllerBase抽象类的控制器。
例如,API控制器看起来像
const personLastNameBetter = getPersonAttributeGen("lastName"); // string | undefined
const personAgeBetter = getPersonAttributeGen("age"); // number | undefined
我们可以从[Route("api/[controller]")]
[ApiController]
public class ExampleController : ControllerBase
{
[HttpGet('getall')]
public IEnumerable<string> Get()
{
return new string[] { "value1","value2" };
}
.......
}
属性配置路由。这是命名控制器的约定,在“ ExampleController”中,此控制器的名称将被视为“ Example”。
因此,根据路由属性([Route()]
),路径将为“ websiteUrl / api / example”。 [Route("api/[controller]")]
标签将与任何控制器名称匹配。因此,如果您将此控制器从ExampleController重命名为TestController(您必须将“ Controller”连接为控制器,系统将以此方式识别该控制器),该控制器的路径为“ websieUrl / api / test”。否则,您可以将路由硬编码为[controller]
,这样就不会依赖于控制器名称。
根据您的要求,您可以做
[Route("api/example")]
因此,如果您对“ websiteUrl / api / token”运行get请求,它将指向此,
[Route("api/token")]
[ApiController]
public class ExampleController : ControllerBase
{
// GET: api/token/
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1","value2" };
}
}
如果要将该URL重定向到所需的路径,请转到项目上的launchsettings.json,如果使用的是IISExpress,则在配置文件内的json文件中-> IISExpress设置““ launchUrl”:“”