C#-制作这些真正的键值对的语法

时间:2019-06-12 23:33:27

标签: c# asp.net

ASP.Net MVC Web应用程序-我的Web.config文件中包含以下代码:

<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://www.contoso.com -->
    <section name="entityFramework" type="words, EntityFramework, Version=numbers, Culture=more words" />
  </configSections>
  <appSettings>
    <add key="x-coord" value="x1,x2,x3" />
    <add key="y-coord" value="y1,y2,y3" />
  </appSettings>
</configuration>  

这是使用<appSettings>键值的方法内部的条件:

if

(ModelState.IsValid && 
((ConfigurationManager.AppSettings["x-coord"].Contains(postModel.xCoordinate.ToLower()) 
& ConfigurationManager.AppSettings["y-coord"].Contains(postModel.yCoordinate.ToLower))))

    {
        return View(postModel);
    }

问题在于,编写此代码时,只要传递x-coord值的 any 和{{1}的 any }值传递后​​,条件条件的值将为y-coord

我需要具有代码功能,以便必须传递x1和y1才能得出true,OR,x2和y2,OR,x3和y3,这样它们才是真正的键值对,而不是两个清单。

我相信所有这些都归结为true.方法,该方法允许任何x和y对被允许。我只是不知道如何执行如上所述的严格配对。

1 个答案:

答案 0 :(得分:1)

您似乎对代码在这里的操作感到困惑。当您在web.config中设置<add key="x-coord" value="x1,x2,x3" />时,您将添加一个具有单个值的密钥,该值是字符串"x1,x2,x3",因此,当您调用ConfigurationManager.AppSettings["x-coord"].Contains(postModel.xCoordinate.ToLower())时,您所做的只是检查是否x坐标字符串包含postModel.xCoordinate中的所有内容(显然已转换为小写)。然后,您对“ y-coord”值进行完全独立的检查。两者之间没有关系。

我不喜欢使用web.config来保存这样的应用程序逻辑,但是如果这确实是您想要的方式,我会对其进行设置,以便您可以分别拆分字符串和处理坐标。像这样:

<add key="coords" value="x1:y1,x2:y2,x3:y3" />

然后您可以执行以下操作:

        var coords = ConfigurationManager.AppSettings["x-coord"].Split(',').ToList();
        coords.ForEach(c =>
        {
            var coord = c.Split(':');
            if (coord[0].Equals(postModel.xCoordinate.ToLower()) && coord[1].Equals(postModel.yCoordinate.ToLower()))
            {
                return View(postModel);
            }
        }
        );