我正在使用的MVC应用程序中的每个页面都在响应中设置这些HTTP标头:
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 2.0
Run Code Online (Sandbox Code Playgroud)
如何防止这些显示?
考虑以下XML:
<response>
<status_code>200</status_code>
<status_txt>OK</status_txt>
<data>
<url>http://bit.ly/b47LVi</url>
<hash>b47LVi</hash>
<global_hash>9EJa3m</global_hash>
<long_url>http://www.tumblr.com/docs/en/api#api_write</long_url>
<new_hash>0</new_hash>
</data>
</response>
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种非常简短的方法来获得<hash>元素的价值.我试过了:
var hash = xml.Element("hash").Value;
Run Code Online (Sandbox Code Playgroud)
但那不起作用.是否可以提供XPath查询XElement?我可以使用旧System.Xml框架来执行此操作,执行以下操作:
xml.Node("/response/data/hash").Value
Run Code Online (Sandbox Code Playgroud)
在LINQ命名空间中是否有这样的东西?
更新:
在对此进行了一些讨论之后,我找到了一种方法来做我正在尝试做的事情:
var hash = xml.Descendants("hash").FirstOrDefault().Value;
Run Code Online (Sandbox Code Playgroud)
我仍然有兴趣看看是否有人有更好的解决方案?
我想了解为什么你可能想要使用global::前缀.在以下代码中,ReSharper将其标识为冗余,并且能够将其删除:

鉴于此字符串:
http://s.opencalais.com/1/pred/BusinessRelationType
Run Code Online (Sandbox Code Playgroud)
我想得到它的最后一部分:"BusinessRelationType"
我一直在考虑反转整个字符串,然后寻找第一个"/",把所有内容都放在左边,然后反过来.但是,我希望有更好/更简洁的方法.思考?
谢谢,保罗
.net函数Parallel.ForEach是否会阻塞调用线程?我对行为的猜测是以下之一:
或许其他事情正在发生,任何人都知道吗?
在日志记录类中实现此问题时出现了这个问题:
public class MultipleLoggingService : LoggingServiceBase
{
private readonly List<LoggingServiceBase> loggingServices;
public MultipleLoggingService(List<LoggingServiceBase> loggingServices)
{
this.loggingServices = loggingServices;
LogLevelChanged += OnLogLevelChanged;
}
private void OnLogLevelChanged(object sender, LogLevelChangedArgs args)
{
loggingServices.ForEach(l => l.LogLevel = LogLevel);
}
public override LogMessageResponse LogMessage(LogMessageRequest request)
{
if (request.LogMessage)
Parallel.ForEach(loggingServices, l => l.LogMessage(request));
return new LogMessageResponse{MessageLogged = request.LogMessage};
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,该LogMessage方法调用其他一些日志服务.我需要该部分立即返回,因此它不会阻止调用线程.
更新:根据其他人的评论(我们已确认行为是#1).所以我已经建议使用Task库并重写循环,如下所示:
if (request.LogMessage)
foreach (var loggingService in loggingServices)
Task.Factory.StartNew(() => loggingService.LogMessage(request));
Run Code Online (Sandbox Code Playgroud) 使用ASP.Net MVC v2.0,我开始研究Html.AntiForgeryToken()在提交处理数据的表单时使用该方法.我可以看到它在HTML表单中设置了一个隐藏值,它在会话cookie中设置了相同的值.
问题是负载均衡配置中的不同Web服务器会在HTML表单中创建相同的令牌吗?看来如果他们没有,那么cookie和隐藏的表单值将不匹配,我们就会遇到问题.在我开始在LB配置中进行实际测试之前,想要检查是否有人已经有过这方面的经验?
谢谢,保罗
security cookies asp.net-mvc load-balancing antiforgerytoken
我正在使用使用Forms身份验证的Web应用程序.
<authentication mode="Forms">
<forms slidingExpiration="true"
loginUrl="~/User.aspx/LogOn"
timeout="15"
name="authToken" />
</authentication>
Run Code Online (Sandbox Code Playgroud)
我登录时在浏览器中看到此cookie设置:

问题是当我将这个网站置于负载均衡模型时会发生什么?ASP.net会话cookie在哪里设置?我没有在代码中明确地做到这一点,所以我认为它发生在ASP.Net的某个幕后.
此外,如果会话cookie由Web服务器A设置,我假设Web服务器B将无法识别它并将其视为无效会话.如果是这种情况,我可能不想使用它,对吧?
我有一个显示错误的linq查询:

如果集合的源是linq查询,我在任何时候尝试访问我正在迭代的变量时都会看到此错误.我想这个错误只是告诉我变量可能会改变,或类似的东西?
我需要一个带字符串和"pascal case"的函数.新单词开始的唯一指标是下划线.以下是一些需要清理的示例字符串:
我开始研究一个使第一个字符为大写的函数:
public string FirstCharacterUpper(string value)
{
if (value == null || value.Length == 0)
return string.Empty;
if (value.Length == 1)
return value.ToUpper();
var firstChar = value.Substring(0, 1).ToUpper();
return firstChar + value.Substring(1, value.Length - 1);
}
Run Code Online (Sandbox Code Playgroud)
上面的函数没有做的是删除下划线和"ToUpper"字符右下角.
此外,任何有关如何使用没有任何指标(如下划线)的字符串的概念.例如:
这里的主要挑战是确定一个词的结束和另一个词的开始.我想我需要某种查找字典来确定新单词的起源位置?我们那里有图书馆可以做这种事吗?
谢谢,
保罗
c# ×6
.net ×4
asp.net-mvc ×2
cookies ×2
regex ×2
security ×2
asp.net ×1
camelcasing ×1
datetime ×1
global ×1
http-headers ×1
linq ×1
linq-to-xml ×1
logging ×1
namespaces ×1
session ×1
xelement ×1
xml ×1
xpath ×1