C# 如何使用参数将路径重定向到URL?
我有一个支持分页的端点:C# 如何使用参数将路径重定向到URL?,c#,asp.net-core,redirect,asp.net-web-api,asp.net-core-webapi,C#,Asp.net Core,Redirect,Asp.net Web Api,Asp.net Core Webapi,我有一个支持分页的端点:api/accounts?pageNumber=1&pageSize=50 [HttpGet] public IActionResult GetAccounts(int pageNumber, int pageSize) { var accounts = _accountService.GetAccounts(pageNumber, pageSize); Response.Headers.Add("X-Pagina
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);
}
但是,如果有人发送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
,并在浏览器中显示它
你能帮我解决这个问题吗?
谢谢
如果有人在浏览器中键入api/帐户,他将被重定向到api/帐户?pageNumber=1&pageSize=50。我想让他在浏览器中看到一个新的URL
另外,如果有人这样做:api/accounts?pageNumber=1&pageSize=500000000,我想做与上一个示例完全相同的事情,请转到:api/accounts?pageNumber=1&pageSize=50并在浏览器中显示
要实现上述要求,您可以使用一个
在Startup.cs中
IISUrlRewrite.xml
使两个参数都可为空(可选)。然后在方法中检查它们是否有值。否,指定默认值。是的,检查它们的值,如果超出允许的值,则指定默认值。@CodingYoshi实际上我现在就是这样做的。但当我在浏览器中键入api/accounts
时,我确实得到了50台电脑的第1页,但地址栏仍然显示api/accounts
。我想更改地址栏,以便它反映响应中的实际内容,以便您需要执行301重定向。您可以重定向到相同的方法。
using (StreamReader iisUrlRewriteStreamReader =
File.OpenText("IISUrlRewrite.xml"))
{
var options = new RewriteOptions()
.AddIISUrlRewrite(iisUrlRewriteStreamReader);
app.UseRewriter(options);
}
<?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>