【问题标题】:Net core api, get parameter with special characterNet core api,获取带特殊字符的参数
【发布时间】:2020-03-26 13:29:31
【问题描述】:

我正在尝试通过 URL 接收参数,但如果此参数有一个“+”我没有收到它,例如:

www.domain.com/api/controller/Demo?guid=123+456

[HttpPost("Demo")]
public IActionResult PostData([FromQuery]string guid, Model model)
{

函数内部,guid值为123 456

【问题讨论】:

  • 搜索“网址编码”。
  • 问题不在于URL的构造,是api去掉了参数中的+
  • 你试过检查Request.Query吗?
  • @juunas 相等,结果没有 +

标签: api asp.net-core


【解决方案1】:

如果这个参数有一个'+'我没有收到它,例如:www.domain.com/api/controller/Demo?guid=123+456。在函数内部,guid 值为 123 456

要达到您的要求,您可以尝试以下方法:

方法 1:在客户端向您的 API 操作发出请求时,手动将 + 符号替换为 %2B

方法2:使用URL Rewriting Middleware对查询字符串guid=123+456进行编码,如下所示。

在 Startup.cs 中

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    //...

    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="TESTURL">
            <match url="api/your_controller_name/Demo" />
            <conditions>
                <add input="{QUERY_STRING}" pattern="guid=([0-9]+\+[0-9]+)" />
            </conditions>
            <action type="Rewrite" url="api/your_controller_name/Demo?guid={UrlEncode:{C:1}}" appendQueryString="false" />
        </rule> 
  </rules>
</rewrite>

测试结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多