将 FormCollection && HttpRequest 转换为 Hashtable



我有两个函数,一个功能是一个接收FormCollection,另一个功能像这样接收HttpRequest

public void SetUrlParameters(FormCollection request, string controllerName = "")
{
    string sessionID = ConvertToString(request["sessionID"]);
    string idSession = ConvertToString(request["idSession"]);
    string sessionid = ConvertToString(request["sessionid"]);
    if (idSession.Length > 0)
        this.sessionID = idSession;
    else if (sessionid.Length > 0)
        this.sessionID = sessionid;
    else
        this.sessionID = sessionID;
}
private void SetUrlParameters(HttpRequest request, string controllerName = "")
{
    string sessionID = ConvertToString(request["sessionID"]);
    string idSession = ConvertToString(request["idSession"]);
    string sessionid = ConvertToString(request["sessionid"]);
    if (idSession.Length > 0)
        this.sessionID = idSession;
    else if (sessionid.Length > 0)
        this.sessionID = sessionid;
    else
        this.sessionID = sessionID;
}
private string ConvertToString(object obj, string defaultValue = "")
{
      if (obj == null) return defaultValue;
      return Convert.ToString(filterSameVariablesValue(obj));
}

您可以看到,两个功能都完全相同。唯一的区别是每个收到的值的类型。

两个功能都在起作用。我想要的是避免在两个功能中重复代码。

有什么办法可以将其崩溃以将其发挥作用?例如,例如将FormCollectionHttpRequest转换为Hashtable并使用?

您可以简单地期望两种类型的NameValueCollection参数(几乎):

private void SetUrlParameters(NameValueCollection data, string controllerName = "")
{
    string sessionID = ConvertToString(data["sessionID"]);
    string idSession = ConvertToString(data["idSession"]);
    string sessionid = ConvertToString(data["sessionid"]);
    if (idSession.Length > 0)
        this.sessionID = idSession;
    else if (sessionid.Length > 0)
        this.sessionID = sessionid;
    else
        this.sessionID = sessionID;
}

HttpRequest的用法:

SetUrlParameters(request.Params);

FormCollection的用法:

SetUrlParameters(formCollection);

请参阅MSDN

FormCollection是从NameValueCollection继承。HttpRequest具有HttpRequest.Form属性,也是NameValueCollection。因此,您可以使用转换为NameValueCollection

避免重复
public void GetParameters(FormCollection form, HttpRequest request)
{
    var parameters = Convert(form);
    parameters = Convert(request.Parameters);
}
public YourParameters Convert(NameValueCollection form)
{
    //your code here
}

最新更新