我有一个支持分页的端点:api/accounts?pageNumber=1&pageSize=50
[HttpGet]
public IActionResult GetAccounts(int pageNumber, int pageSize)
{
var accounts = _accountService.GetAccounts(pageNumber, pageSize);
Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(accounts.GetMetadata()));
return Ok(accounts);
}
但是,如果有人从技术上发送bad request
,而pageSize太大或根本没有分页参数,那么我不希望发回400 status
,而是将其重定向到带有默认参数的正确URL。意思是:
如果有人在浏览器中输入api/accounts
,他将被重定向到api/accounts?pageNumber=1&pageSize=50
。我希望他在浏览器中看到一个新的URL。另外,如果有人这样做:
api/accounts?pageNumber=1&pageSize=500000000
,我想做与上一个示例完全相同的操作,请转到:api/accounts?pageNumber=1&pageSize=50
并将其显示在浏览器中。
您能帮我这个忙吗? 谢谢
答案 0 :(得分:0)
如果有人在浏览器中输入api /帐户,他将被重定向到api /帐户?pageNumber = 1&pageSize = 50。我希望他在浏览器中看到一个新的URL。
如果有人这样做:api / accounts?pageNumber = 1&pageSize = 500000000,我想做与上一个示例完全相同的操作,请转到:api / accounts?pageNumber = 1&pageSize = 50并显示在浏览器。
要达到上述要求,可以使用URL redirect来参考以下示例。
在Startup.cs中
using (StreamReader iisUrlRewriteStreamReader =
File.OpenText("IISUrlRewrite.xml"))
{
var options = new RewriteOptions()
.AddIISUrlRewrite(iisUrlRewriteStreamReader);
app.UseRewriter(options);
}
IISUrlRewrite.xml
<?xml version="1.0" encoding="utf-8" ?>
<rewrite>
<rules>
<rule name="urrl1" stopProcessing="true">
<match url="api/accounts" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{QUERY_STRING}" pattern="pageNumber=([0-9]{1,3})&pageSize=(10|50|100)$" negate="true" />
</conditions>
<action type="Redirect" url="api/accounts?pageNumber=1&pageSize=50" appendQueryString="false" />
</rule>
</rules>
</rewrite>
测试结果