Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用参数将路径重定向到URL?_C#_Asp.net Core_Redirect_Asp.net Web Api_Asp.net Core Webapi - Fatal编程技术网

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})&amp;pageSize=(10|50|100)$" negate="true" />
        </conditions>
        <action type="Redirect" url="api/accounts?pageNumber=1&amp;pageSize=50" appendQueryString="false" />
    </rule>
  </rules>
</rewrite>