我有一些继承的代码,它system.net/mailSettings/smtp
在Web.config 的部分中存储SMTP服务器,用户名和密码.
它曾经像这样读取它们:
Configuration c = WebConfigurationManager.OpenWebConfiguration(HttpContext.Current.Request.ApplicationPath);
MailSettingsSectionGroup settings = (MailSettingsSectionGroup)c.GetSectionGroup("system.net/mailSettings");
return settings.Smtp.Network.Host;
Run Code Online (Sandbox Code Playgroud)
但是当我不得不部署到中等信任环境时,这种情况就失败了.
所以按照这个问题的答案,我重写它使用GetSection()
如下:
SmtpSection settings = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp");
return settings.Network.Host;
Run Code Online (Sandbox Code Playgroud)
但它仍然在中等信任上给我一个SecurityException,并带有以下消息:
尝试访问配置部分'system.net/mailSettings/smtp'时,ConfigurationPermission请求失败.要允许所有调用者访问此部分的数据,请在声明此部分的配置文件中将section属性'requirePermission'设置为等于'false'.
所以我尝试了这个requirePermission
属性,但无法弄清楚放在哪里.
如果我将它应用于<smtp>节点,我会得到一个ConfigurationError:"无法识别的属性'requirePermission'.请注意,属性名称区分大小写."
如果我将它应用于<mailSettings>节点,我仍然会得到SecurityException.
有没有办法在中等信任下以编程方式获取此配置部分?或者我应该放弃它并将设置移动到<appSettings>?
我有一个请求,要求研究==
在一个相当大的C#代码库中使用String.Equals()
明确指定区分大小写的方法调用替换所有字符串运算符用法的可行性.
但是,没有太多运气找出识别代码库中所有事件的方法.
System.String.op_Equality
但似乎没有在LINQ表达式内部使用,例如.Where(x => x.StringField == stringField)
所以我有点难过,想知道是否有人对如何搜索这些讨厌的比较有任何想法?
我们有一个较旧的ASP.NET WebForms应用程序,它通过$.ajax()
在客户端使用jQuery 调用来执行AJAX请求,在使用[WebMethod]
属性修饰的页面代码隐藏中调用静态方法.
如果在WebMethod中发生未处理的异常,则它不会触发Application_Error
事件,因此我们的错误记录器(ELMAH)不会将其捕获.这是众所周知的而不是问题 - 我们将所有WebMethod代码包装在try-catch块中,并将异常手动记录到ELMAH.
但是,有一个案例令我难过.如果格式错误的Json发布到WebMethod URL,它会在输入我们的代码之前抛出异常,我找不到任何方法来捕获它.
例如,这个WebMethod签名
[WebMethod]
public static string LeWebMethod(string stringParam, int intParam)
Run Code Online (Sandbox Code Playgroud)
通常使用Json有效负载调用,如:
{"stringParam":"oh hai","intParam":37}
Run Code Online (Sandbox Code Playgroud)
我尝试使用Fiddler进行测试,将有效负载编辑为格式错误的Json:
{"stringParam":"oh hai","intPara
Run Code Online (Sandbox Code Playgroud)
并ArgumentException
从JavaScriptObjectDeserializer
发送到客户端获得以下错误响应(这是在本地运行的简单测试应用程序,没有自定义错误):
{"Message":"Unterminated string passed in. (32): {\"stringParam\":\"oh hai\",\"intPara","StackTrace":" at
System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeString()\r\n at
System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeMemberName()\r\n at
System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)\r\n at
System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n at
System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n at
System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n at
System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n at
System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)\r\n at …
Run Code Online (Sandbox Code Playgroud) 我们最近在我们的网站上修复了一个唠叨错误,类似于如何停止从沃达丰代理注入javascript中描述的错误? - 基本上,沃达丰移动网络正在破坏我们的传输页面,对JavaScript进行了编辑,打破了视图模型.
将"Cache-Control:no-transform"标题添加到遇到问题的页面修复它,这很好.
但是,我们担心,随着我们使用JavaScript MVP技术进行更多客户端开发,我们可能会再次看到它.
有没有理由不将此标题添加到我们网站提供的每个页面?
这会阻止任何有用的转换吗?或者它基本上只是运营商制造火腿试图缩小事物并在此过程中破坏它们的类似例子?