如何在 API 端点 .NET Core 上添加后缀
How to add suffix on API Endpoints .NET Core
有没有办法在所有端点路由上自动添加后缀,例如 .json.
v1/users.json
v1/users/{id}.json
到目前为止我尝试的是创建一个如下所示的 BaseController
[ApiController]
[Route("v1/[controller].json")]
public class BaseController : ControllerBase
{
}
但每次我将它用于我的控制器时,它看起来像这样
v1/users.json
v1/users.json/{id}
您可以向实际端点而不是控制器添加额外路由
[ApiController]
[Route("v1/[controller]")]
public class BaseController : ControllerBase
{
[HttpGet(".json")]
public IActionResult Get()
{
}
// Without Route Parameters
[HttpGet("{id}.json")]
public IActionResult Get([FromRoute] int id)
{
...
}
// With Route and Query Parameters
[HttpGet("{id}.json/friend")]
public IActionResult Get([FromRoute]int id,[FromQuery] string friendName)
{
...
}
// With Route and Query Parameters and Body
[HttpPost("{id}.json/friends")]
public IActionResult Get([FromRoute]int id,[FromQuery] string message, [FromBody]IFilter filter)
{
...
}
}
您可以使用 URL 重写中间件来接受带有 .json 的 URLs,然后简单地删除它。所以像:
/api/users/123/picture.json?query=123
会变成:
/api/users/123/picture?query=123
您可以通过将以下代码添加到 Startup 的 Configure
方法中来完成此操作:
var rewriteOptions = new RewriteOptions()
.AddRewrite(@"^(.*?)(?:\.json)(\?.*)?$", "");
app.UseRewriter(rewriteOptions);
有关详细信息,请参阅 docs。
警告:如果您使用 Url.Action(...)
等在代码中生成 URL,则它不会包含 .json
。重写仅影响传入请求。
有没有办法在所有端点路由上自动添加后缀,例如 .json.
v1/users.json
v1/users/{id}.json
到目前为止我尝试的是创建一个如下所示的 BaseController
[ApiController]
[Route("v1/[controller].json")]
public class BaseController : ControllerBase
{
}
但每次我将它用于我的控制器时,它看起来像这样
v1/users.json
v1/users.json/{id}
您可以向实际端点而不是控制器添加额外路由
[ApiController]
[Route("v1/[controller]")]
public class BaseController : ControllerBase
{
[HttpGet(".json")]
public IActionResult Get()
{
}
// Without Route Parameters
[HttpGet("{id}.json")]
public IActionResult Get([FromRoute] int id)
{
...
}
// With Route and Query Parameters
[HttpGet("{id}.json/friend")]
public IActionResult Get([FromRoute]int id,[FromQuery] string friendName)
{
...
}
// With Route and Query Parameters and Body
[HttpPost("{id}.json/friends")]
public IActionResult Get([FromRoute]int id,[FromQuery] string message, [FromBody]IFilter filter)
{
...
}
}
您可以使用 URL 重写中间件来接受带有 .json 的 URLs,然后简单地删除它。所以像:
/api/users/123/picture.json?query=123
会变成:
/api/users/123/picture?query=123
您可以通过将以下代码添加到 Startup 的 Configure
方法中来完成此操作:
var rewriteOptions = new RewriteOptions()
.AddRewrite(@"^(.*?)(?:\.json)(\?.*)?$", "");
app.UseRewriter(rewriteOptions);
有关详细信息,请参阅 docs。
警告:如果您使用 Url.Action(...)
等在代码中生成 URL,则它不会包含 .json
。重写仅影响传入请求。