如何处理 Web API 中的可选查询字符串参数

2024-04-05

我正在编写一个 Web API,我希望了解处理可选查询字符串参数的最佳方法是什么。

我有一个定义如下的方法:

    [HttpPost]
    public HttpResponseMessage ResetPassword(User user)
    {
        var queryVars = Request.RequestUri.ParseQueryString();
        int createdBy = Convert.ToInt32(queryVars["createdby"]);
        var appId = Convert.ToInt32(queryVars["appid"]);
        var timeoutInMinutes = Convert.ToInt32(queryVars["timeout"]);

        _userService.ResetPassword(user, createdBy, appId, timeoutInMinutes);
        return new HttpResponseMessage(HttpStatusCode.OK);
    }

我可以通过在帖子正文中提供用户对象并可选择提供任何附加查询字符串值来调用此方法,但是当我遇到随机参数分类的一次性情况时,这是解析的最佳方法吗?
如果我有同样的场景,但有 15 个可选参数(可能是极端情况)怎么办?


您应该使用包含所有可能参数的视图模型。然后让你的 API 方法将此视图模型作为参数。并且永远不要触及操作中的原始查询字符串:

public class UserViewModel
{
    public string CreatedBy { get; set; }
    public string AppId { get; set; }
    public int? TimeoutInMinutes { get; set; }

    ... other possible parameters
}

然后在您的操作中,您可以将视图模型映射到域模型:

[HttpPost]
public HttpResponseMessage ResetPassword(UserViewModel userModel)
{
    User user = Mapper.Map<UserViewModel, User>(userViewModel);
    _userService.ResetPassword(user, userModel.CreatedBy, userModel.AppId, userModel.TimeoutInMinutes);
    return new HttpResponseMessage(HttpStatusCode.OK);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理 Web API 中的可选查询字符串参数 的相关文章

随机推荐

  • 使用 pthread_create 时出现 valgrind 内存泄漏错误

    我正在使用 pthread 库编写一个程序 当我使用命令运行程序时valgrind leak check full 我得到以下错误描述 11784 11784 HEAP SUMMARY 11784 in use at exit 4 952
  • 分裂长长

    如何 拆分 即 long long 类型 以便它的第一部分位于 long 类型的 var 中 第二部分也位于 long 类型的 var 中 long long long type 0xaaaabbbbccccdddd 在第一个 int 中
  • textarea、tinyMCE 并在 textarea 中插入图像

    我想用 jquery 在文本区域中插入图像 我知道 img 标签无法插入到文本区域中 我正在使用tinymce img src image jpg class po
  • 如何仅导入子模块而不执行包中的 exec __init__.py

    当从包中导入子模块时 包文件夹中的 init py 文件将首先被执行 如何禁用它 有时我只需要一个包中的一个函数 导入整个包有点繁重 例如pandas io clipboard模块不依赖于 pandas 中的任何其他函数 from pand
  • iPhone 上的 CoreData 支持 IN 谓词吗?

    我正在尝试根据用户定义的类型列表来获取某种类型的一堆记录 fetchRequest setEntity NSEntityDescription entityForName myRecord inManagedObjectContext se
  • 如何在 Genymotion 虚拟设备上安装 Google 框架(Play、帐户等)? [复制]

    这个问题在这里已经有答案了 我目前正在尝试 Genymotion 天哪 它比 ADT 模拟器快得多 但我需要安装 Google Play 才能下载一些应用程序 我该怎么做呢 2017 年 5 月 28 日更新 据我所知 我不再支持此方法 并
  • MySQL 到 Oracle 语法错误(限制/偏移/更新)

    我有一个适用于我当前的 MySQL 数据库的 MySQL 查询 我被迫转向 Oracle 因此我尝试移植所有存储过程 程序以使用 Oracle SQL 语法 我在一个特定查询上遇到了很多麻烦 这是 MySQL 查询 它使用子查询更新表 up
  • 如何使用 Pandas 从 Excel 读取某些列 - Python

    我正在读取 Excel 工作表 并且想要读取某些列 第 0 列 因为它是行索引 和第 22 37 列 现在这就是我所做的 import pandas as pd import numpy as np file loc path xlsx d
  • 传单通过图层选择添加/删除图例

    我是 Leaflet JavaScript 的新手 并且一直在努力让图例仅在从图层控件中选择特定图层时才显示地图 我有三层 其中一层我希望没有图例 另外两层有相应的图例 我遇到了一个例子 但未能使其工作 Add and remove leg
  • 仅在某些 Android 设备上抛出 java.net.SocketTimeoutException

    我正在尝试从 Android 设备上传 JPEG 图像文件 我正在使用square okhttp用于创建请求的库 我在联想 Yoga 平板电脑上遇到这个问题 当我尝试上传图像时 出现以下异常 但当我在 Samsung Galaxy Tab
  • 更改 TensorBoard 中的图像滑块步骤

    TensorBoard 1 1 0 的图像历史 我想更精确地设置滑块的位置 在带有 7 的黑色图像顶部 以便能够选择任何步骤 现在我只能选择例如在步骤2050或2810之间 这可能吗 也许源代码中的某个位置对 10 常数进行了硬编码 我在那
  • php 邮件功能无法使用

    当我尝试在本地主机上使用 php 邮件功能发送邮件时 出现以下错误 可能是什么问题 我什至尝试更改 php ini 文件并给 smtp 主机值提供我的服务提供商值及其仍在努力工作 警告 mail function mail 无法连接到 lo
  • 使用滑动窗口函数处理向量的 MATLAB 函数,返回向量响应矩阵

    假设向量v尺寸的1 x n和功能fun接受一个长度向量L并返回一个大小向量p x 1 是否有一个 MATLAB 函数可以接受向量v 处理每个长度的滑动窗口L使用函数 fun 并返回大小的矩阵p x n or p x n L 我知道这可以通过
  • 对 JSON 编码的字段使用 MySQL LIKE 运算符

    我一直在尝试使用此查询获取表行 SELECT FROM table WHERE field LIKE u0435 u0442 u043e u0442 字段本身 Field u0435 u0442 u043e u0442 u0442 u043
  • 如何创建具有包结构的jar文件?

    我有一个文件夹结构 com cdy ws a class files com cdy ws b class files com cdy ws c class files 当我运行以下命令 jar cvf asd jar class 时 它会
  • abort() 不是 VS2010 中的 __declspec(noreturn)

    在我的 VS2010 副本中 stdlib h 包含 第 353 355 行 CRTIMP declspec noreturn void cdecl exit In int Code CRTIMP declspec noreturn voi
  • 如何撤消 Angular 2 Cli ng-eject?

    我刚刚执行了ng eject命令 但现在我需要恢复它 并继续使用ng命令 是否可以 我将不胜感激任何帮助 At https github com angular angular cli blob master packages 40angu
  • 如何获取给定字体文件的字体系列的名称?

    我有一组文件名不可预测的字体文件 因此我无法从文件名中推断出真正的 字体系列 名称 因此 我需要读取字体元数据以提取真正的 字体系列 名称 以便渲染此字体文件 我使用的是 C NET 4 0 WinForms 我见过这个功能GetFontI
  • 如何将日期选择器最大日期限制为今天? [复制]

    这个问题在这里已经有答案了 问题就在标题里 我有两个日期选择器 从和到 我想将日期选择器限制为当前日期 我怎么做 提前致谢 使用 maxDate 选项 http jqueryui com demos datepicker option ma
  • 如何处理 Web API 中的可选查询字符串参数

    我正在编写一个 Web API 我希望了解处理可选查询字符串参数的最佳方法是什么 我有一个定义如下的方法 HttpPost public HttpResponseMessage ResetPassword User user var que