Web API 空白参数值被转换为 null

2024-01-19

我有一个简单的 Web API 服务。大约有 10 种不同的 GET 操作,这些操作根据输入参数返回各种数据库记录的 JSON 输出。

对于一个特定端点,一个空格,“ ”应该是一个有效的参数,但它被转换为 null。有没有解决的办法?

例如网址是:http://localhost:1234/DataAccess/RetrieveProductData?parameterOne=null&parameterTwo=574&problemParameter=%20&parameterThree=AB12

在控制器操作中我可以看到以下内容:

int? parameterOne => null
string parameterTwo => "574"
string problemParameter => null
string parameterThree => "AB12"

有什么方法可以真正获得:

string problemParameter => " "

或者这是不可能的?


我通过添加一个解决了这个问题ParameterBindingRule有足够的标准来匹配我遇到问题的确切参数:

注册码:

config.ParameterBindingRules.Add(p =>
            {
                // Override rule only for string and get methods, Otherwise let Web API do what it is doing
                // By default if the argument is only whitespace, it will be set to null. This fixes that
                // commissionOption column default value is a single space ' '.
                // Therefore a valid input parameter here is a ' '. By default this is converted to null. This overrides default behaviour.
                if (p.ParameterType == typeof(string) && p.ActionDescriptor.SupportedHttpMethods.Contains(HttpMethod.Get) && p.ParameterName == "commissionOption")
                {
                    return new StringParameterBinding(p);
                }

                return null;
            });

StringParameterBinding.cs:

public StringParameterBinding(HttpParameterDescriptor parameter)
    : base(parameter)
{
}

public override Task ExecuteBindingAsync(ModelMetadataProvider metadataProvider, HttpActionContext actionContext, CancellationToken cancellationToken)
{
    var value = actionContext.Request.GetQueryNameValuePairs().Where(f => f.Key == this.Descriptor.ParameterName).Select(s => s.Value).FirstOrDefault();

    // By default if the argument is only whitespace, it will be set to null. This fixes that
    actionContext.ActionArguments[this.Descriptor.ParameterName] = value;

    var tsc = new TaskCompletionSource<object>();
    tsc.SetResult(null);
    return tsc.Task;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web API 空白参数值被转换为 null 的相关文章

随机推荐

  • 在具有桥接网络的 Docker 容器中映射主机的 /etc/hosts

    我有一台主机 其 etc hosts 文件中定义了一些主机解析 在这台机器上 我正在运行配置了 Bridge 网络的 Docker 容器 由于我不在主机网络上 我的 Docker 容器无法访问我的机器 etc hosts 文件的主机定义 不
  • 滑块在 jQuery 选项卡中不起作用

    我想在 jQuery 选项卡中使用 2 个 jQuery Flexslider 选项卡 1 上的滑块工作正常 但在选项卡 2 中不起作用 这是 JSFiddle 上代码的完整演示 Demo http jsfiddle net vH5DT h
  • 出现错误“当前上下文中不存在名称‘配置’”

    我正在使用 Visual Studio 2013 和 NET Framework 4 5 我已经包括了System Configuration作为项目中的参考 我还在类中包含了一个 using 语句 如下所示 using System Co
  • C++,通过 const 引用访问 std::map 元素

    我对 const 有疑问 说我有 class A friend std ostream operator lt lt std ostream os const A myObj private std map
  • 变量初始化列表

    是否有可能创建一个initializer list变量 例如函数参数 参见函数test 下面的代码有效 Clang 和 GCC 都没有抱怨任何事情 但我只是想确保这没问题 include
  • ChromeProxyService:无法评估表达式

    通常 当从列表渲染时 我会看到 Flutter 抛出以下内容 从下面的示例中 请参阅 PositionedTilesState ChromeProxyService Failed to evaluate expression tiles C
  • 使用泛型类型的运算符时出错[重复]

    这个问题在这里已经有答案了 我正在学习 Rust 我不明白为什么下面的代码会出错 use std ops Mul use std ops Add struct Vec2
  • Vue js将多个样式属性绑定到一个元素

    这会将背景颜色属性绑定到 td 元素 td Some text td 但是 如果我不仅想绑定背景颜色 同时还想绑定前景色 正常颜色属性 该怎么办 如何将多个样式属性绑定到一个元素 首先 css中没有前景色 您可以使用多种样式 并以逗号分隔k
  • 如何在react中解析xml文件?

    我尝试过使用一些库 但似乎找不到任何答案 我有一个 React 网站 我正在使用表单上传文件 我正在寻找一种方法来解析XML文件 并到达它的孩子 但我似乎找不到方法来做到这一点 My form
  • HikariCP多线程每个线程单独连接

    致 stackoverflow 社区的人们 我正在寻求一些帮助来解决我在 HikariCP 连接池方面遇到的问题 高水平 我正在尝试使用线程池创建多个线程 我的计划是为每个工作线程提供与 HikariCP 各自独立的连接 但 HikariC
  • 将 Xcode 8 与 iOS 11 结合使用

    我想在 iOS 11 中使用 Xcode 8 我应该升级我的 Xcode 吗 但是 我的代码无法由新编译器构建 因此我想继续使用 Xcode 8 我怎样才能做到这一点 苹果在 WWDC 2017 上公布了 iOS 11 的多项新功能 截至目
  • 新版 Google Play 服务中的“Listener”发生了什么变化

    在 Android Studio 中 我已更新 Google Play 服务 com google android gms play services 6 1 11 to com google android gms play servic
  • 我的代码发出错误“应用程序:不是过程”或“调用非过程”

    在执行我的代码期间 我在不同的方案实现中遇到以下错误 Racket application not a procedure expected a procedure that can be applied to arguments give
  • Bootstrap:如何识别Bootstrap版本?

    我想更新网站上的 Bootstrap 但我不知道安装的版本 如何仅使用 bootstrap css 和 bootstrap min js 文件来识别 bootstrap 版本 CSS 文件中没有版本 min js 文件包含以下注释 Boot
  • 错误:postgresql 中不存在用于更新的列[重复]

    这个问题在这里已经有答案了 我正在尝试将一行文本插入到该列为空的列中 下面列出了错误 任何帮助是极大的赞赏 UPDATE public meditech ar test4 SET filename text WHERE filename i
  • 对 Unity 项目执行版本控制的最佳方法 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在开发我的第一个大型 Unity 项目 这是一个游戏 我有很多资产 现在他们使用超过 200 Mbs 的硬盘 我想使用像 GIT 这样的控制
  • 更新到 jruby-1.7.13 后,在 jruby 中要求自制 gem 失败

    我使用了 jruby 1 7 0 和测试框架 Test Unit TestCase 现在我更新了一些gems 导致我使用MiniTest Test进行测试 所以我也升级到了jruby 1 7 13 我也有一个 rake 任务 它使用 jav
  • 打印出 SQL 单个查询 (Yii 1.x)

    我有一个使用 CDbCriteria 生成的大量查询 如下所示 schema Yii app gt db gt schema builder schema gt commandBuilder how to echo out this que
  • 灵活的数组成员,不必是最后一个

    我试图弄清楚 C 中是否有一种解决方法可以在结构中拥有灵活的数组成员 这不是最后一个 例如 这会产生编译错误 typedef struct attribute packed uint8 t slaveAddr lt The slave ad
  • Web API 空白参数值被转换为 null

    我有一个简单的 Web API 服务 大约有 10 种不同的 GET 操作 这些操作根据输入参数返回各种数据库记录的 JSON 输出 对于一个特定端点 一个空格 应该是一个有效的参数 但它被转换为 null 有没有解决的办法 例如网址是 h