【问题标题】:How to redirect path to the URL with parameters?如何使用参数将路径重定向到 URL?
【发布时间】:2019-12-16 18:10:35
【问题描述】:

我有一个支持分页的端点: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 并在浏览器中显示。

你能帮我解决这个问题吗? 谢谢

【问题讨论】:

  • 使两个参数都可以为空(可选)。然后在方法中检查它们是否有值。不,分配默认值。是的,检查它们的值,如果超出允许值,指定默认值。
  • @CodingYoshi 这就是我现在实际操作的方式。但是当我在浏览器中输入api/accounts 时,我确实得到了50 个page1,但地址栏仍然显示api/accounts。我希望更改地址栏,以便它反映响应中的实际内容
  • 为此,您需要进行 301 重定向。您可以重定向到相同的方法。

标签: c# asp.net-core redirect asp.net-web-api asp.net-core-webapi


【解决方案1】:

如果有人在浏览器中输入 api/accounts,他将被重定向到 api/accounts?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})&amp;pageSize=(10|50|100)$" negate="true" />
        </conditions>
        <action type="Redirect" url="api/accounts?pageNumber=1&amp;pageSize=50" appendQueryString="false" />
    </rule>
  </rules>
</rewrite>

测试结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    相关资源
    最近更新 更多