首页 > 解决方案 > C# - 生成这些真正的键值对的语法

问题描述

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值,并且传递了任何y-coord值,条件将评估为true.

我需要有这样的代码函数,使得必须传递 x1 和 y1 以评估为 true、OR、x2 和 y2、OR、x3 和 y3,这样它们是真正的键值对,而不仅仅是两个列表。

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

标签: c#asp.net

解决方案


你似乎对你的代码在这里做什么感到困惑。当您<add key="x-coord" value="x1,x2,x3" />在 web.config 中设置时,您将添加一个具有单个值的键,该值是一个字符串,"x1,x2,x3"因此当您调用时,您ConfigurationManager.AppSettings["x-coord"].Contains(postModel.xCoordinate.ToLower())所做的就是检查 x-coord 字符串是否包含其中的任何内容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);
            }
        }
        );

推荐阅读