【问题标题】:General Function to read from query string c#从查询字符串c#中读取的通用函数
【发布时间】:2020-03-31 11:30:21
【问题描述】:

我正在尝试创建从查询字符串读取的通用函数,然后将值转换为正确的类型。例如 : 说网址:www.myWeb.com?intParm=111&strParam=hi There&guidParam=0DAE20CD-383B-41F8-B2A5-6231CE5012F0

第一次尝试:

   public object GetPage_Param(string _ParamName, object _Default)
    {
        object Value = null;
        if (HttpContext.Current.Request.QueryString[_ParamName] != null)
            Value = HttpUtility.UrlDecode(HttpContext.Current.Request.QueryString.GetValues(_ParamName)[0]);

        if (Value != null)
            Value = (_Default == null) ? string.Empty : _Default;
        if (Value is int)
            return System.Convert.ToInt32(Value);
        else if (Value is Int64)
            return System.Convert.ToInt64(Value);
        else if (Value is double)
            return System.Convert.ToDouble(Value);
        else if (Value is float)
            return System.Convert.ToSingle(Value);
        else if (Value is decimal)
            return System.Convert.ToDecimal(Value);
        else if(Value is Guid)
            return Guid.Parse(Value.ToString());
        else
            return Value;
    }

我仍然需要转换,即 Guid varGuid = GetPage_Param("guidParam", Guid.Empty);

第二次尝试:

    public T GetPage_Param<T>(string _ParamName, T _Default)
    {
        object Value = null;
        if (HttpContext.Current.Request.QueryString[_ParamName] != null)
            Value = HttpUtility.UrlDecode(HttpContext.Current.Request.QueryString.GetValues(_ParamName)[0]);

        if (Value == null)
            Value = (_Default == null) ? string.Empty : _Default;

        return (T)Value;
    }

我认为这不是正确的方法(:( 错误每件商品)......任何帮助,链接,新想法谢谢 :)

请注意我使用的是 asp.net 网络表单和框架 4.7.2

【问题讨论】:

  • 您有什么具体原因不让框架解析您的参数吗?
  • 检查值并给出默认值......我愿意接受任何建议,帮助:)
  • 如果你在你的控制器方法中定义你的参数,你可以给他们默认值:public void DoSomething(int? parm1, long parm2 = 0)
  • 抱歉,我忘了告诉我我使用的是 webforms :( 不是 MVC 或 web api

标签: c# asp.net


【解决方案1】:

Request 对象的 QueryString 属性是 NameValueCollection - 这是键值对的集合,其中键和值都是字符串。

这意味着您代码中的Value is int 将始终返回false(事实上,任何其他不是string 的类型)。

你可以做的是改用TryParse

if(int.TryParse(Value, out var value)) return value;
if(double.TryParse(Value, out var value)) return value;

等等 - 然而,这也不是一个很好的选择,因为你可能会得到误报 - 一些字符串可能可以解析为不同的类型,所以如果你决定这样做,你应该非常小心你所做的事情。

最好的做法是提前决定你愿意接受什么数据类型作为每个特定的查询字符串参数,以及是否单独转换它们。

【讨论】:

  • 感谢您的快速响应,我认为这是个好主意,而且它的工作原理……受到您最后两段的启发……我开始考虑重载函数来分别处理每种数据类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多