c# - 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 被允许。我只是不知道如何执行如上所述的严格配对。
解决方案
你似乎对你的代码在这里做什么感到困惑。当您<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);
}
}
);
推荐阅读
- javascript - Nav 菜单单击打开和关闭 Nav 项目和内容
- angular - 在 ngFor 中有条件地应用 flex 布局
- google-cloud-platform - 无法在构建触发器设置中查看 GitHub 存储库列表
- javascript - JS反转概率
- r - 无法加载 Rcpp 包
- php - 使用数据库中的值检查变量值
- python - python pandas如何通过其他数据框扩展数据框
- powershell - 合并多个 csv 文件,忽略元数据行并处理不同的引用
- android - 一个可跨越的字符串是高亮的,另一个不是
- mule - AnypointPoint-mq 订阅者和 AnypointPoint mq 消费者之间的区别