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

我正在编写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);
    }

我可以通过在post主体中提供用户对象并可选地提供任何其他查询字符串值来调用它,但是当我有一个随机分类参数的一次性情况时,这是解析的最佳方式?
如果我有相同的情况,但有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);
}

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...