我们有一个依赖原型的遗留代码的应用程序,但是我们发现它对于我们想要使用它的大多数地方来说太"沉重",并且发现jQuery更适合我们的工作方式.所以我们正在迁移到jQuery以获得新功能.
与此同时,我们有几个页面需要加载两个库:
<script language="javascript" type="text/javascript"
src="prototype-1.5.1.2.js"></script>
<script language="javascript" type="text/javascript"
src="jquery-1.3.2.js"></script>
<script language="javascript" type="text/javascript">
$j = jQuery.noConflict();
</script>
Run Code Online (Sandbox Code Playgroud)
(注意原型的旧版本,我们发现升级时出现的问题,无论如何我们都不想修复它们)
这适用于IE6,IE7,IE8-as-7和FX3,但在Chrome中加载它并且所有jQuery内容都失败了.
加载开发人员javascript控制台会显示以下错误:
Uncaught Error: NOT_SUPPORTED_ERR: DOM Exception 9 http://.../prototype-1.5.1.2.js (line 1272)
Uncaught TypeError: Object #<an Object> has no method 'ready' http://.../lib.js (line 161)
Uncaught TypeError: Object #<an Object> has no method 'slideUp' http://.../page.aspx (line 173)
... and so on - all the failures are missing jQuery methods
Run Code Online (Sandbox Code Playgroud)
所以这看起来像原型中的冲突导致jQuery对象的创建失败.
特定的原型问题似乎是Prototype.BrowserFeatures.XPath,当它不应该是真的时,因为不支持XPath document.evaluate.
好的,现在重新加载页面,打开javascript控制台 - 一切正常!WTF?关闭控制台,重新加载,然后再次失败.
只有在没有打开javascript控制台的情况下发生页面加载时才会发生故障 - 为什么会有任何区别?这看起来非常像Chrome中的错误.
有谁能解释出了什么问题?为什么原型中的错误会导致jQuery init失败?为什么在打开控制台的情况下加载页面会使其工作?
有人知道一个好的解决方法吗?(除了升级到prototype-1.6.0.3.js之外,它修复了这个问题,但在其他地方打破了遗留代码的负载)
我希望用户能够通过HTTP基本身份验证模式登录.
问题是我还希望他们能够再次注销 - 奇怪的是,浏览器似乎并不支持.
这被认为是一种社交黑客风险 - 用户将其机器解锁并且浏览器打开,而其他人可以轻松地访问该网站.请注意,仅关闭浏览器选项卡不足以重置令牌,因此用户可能很容易错过.
所以我想出了一个解决方法,但这是一个完全的问题:
1)将它们重定向到Logoff页面
2)在该页面上激活一个脚本到ajax加载另一个带有伪凭证的页面:
$j.ajax({
url: '<%:Url.Action("LogOff401", new { id = random })%>',
type: 'POST',
username: '<%:random%>',
password: '<%:random%>',
success: function () { alert('logged off'); }
});
Run Code Online (Sandbox Code Playgroud)
3)应该总是第一次返回401(强制传递新凭据),然后只接受伪凭证:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult LogOff401(string id)
{
// if we've been passed HTTP authorisation
string httpAuth = this.Request.Headers["Authorization"];
if (!string.IsNullOrEmpty(httpAuth) &&
httpAuth.StartsWith("basic", StringComparison.OrdinalIgnoreCase))
{
// build the string we expect - don't allow regular users to pass
byte[] enc = Encoding.UTF8.GetBytes(id + ':' + id);
string expected …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个清晰,简洁和准确的答案.
理想情况下,作为实际答案,虽然欢迎链接到良好的解释.
这也适用于VB.Net,但关键字是不同的 - ByRef和ByVal.
这可能是最好的例子.我有一个属性的枚举:
public enum MyEnum {
[CustomInfo("This is a custom attrib")]
None = 0,
[CustomInfo("This is another attrib")]
ValueA,
[CustomInfo("This has an extra flag", AllowSomething = true)]
ValueB,
}
Run Code Online (Sandbox Code Playgroud)
我想从实例中获取这些属性:
public CustomInfoAttribute GetInfo( MyEnum enumInput ) {
Type typeOfEnum = enumInput.GetType(); //this will be typeof( MyEnum )
//here is the problem, GetField takes a string
// the .ToString() on enums is very slow
FieldInfo fi = typeOfEnum.GetField( enumInput.ToString() );
//get the attribute from the field
return fi.GetCustomAttributes( typeof( CustomInfoAttribute ), false …Run Code Online (Sandbox Code Playgroud) 我已经阅读了最新C#语言规范中的部分方法,所以我理解了原理,但我想知道人们是如何使用它们的.是否有特定的设计模式可以从部分方法中受益?
我可以将DataContext连接到Oracle数据库,但是在针对oracle数据库运行查询时遇到错误.我查看了生成的SQL,它适用于MSSQL而不是Oracle PSQL.
有没有人知道一个容易使用的包装器来使用LINQ来对抗Oracle数据库?
我的硕士论文是研究如何应用敏捷.
有大量的企业销售敏捷 - 许多管理顾问将其品牌称为"最佳".
我不感兴趣XP,Scrum,Crystal Clear,Agile-CMMI,Six Sigma或任何其他品牌/变体是否最佳.我对真实的,活跃的开发人员(即你们)真正适用于敏捷的人感兴趣.
我调查的是如何根据不同的组织要求定制敏捷.
通过对不同组织如何应用敏捷的研究,我制定了以下指南 - 应该在什么情况下应用敏捷变体的方法:
当应用于具有现有传统(即BDUF或瀑布)模型的组织时,这些因素会发生变化,敏捷团队必须与使用非敏捷方法的团队共存或改编:
这些附加指南将有助于敏捷与传统模型共存,但它们提供了额外的开销和限制.
我想知道的是你 - 编写软件的人,而不是敏捷顾问 - 想到这个框架.
您认为准确的是什么?你觉得怎么了?你会改变什么?我错过了什么?
最重要的是:为什么?
我已经为此添加了一笔赏金,以提供额外的奖励来回答这个相当长的问题.赏金将归于SO社区获得最多选票的人 - 我意识到没有单一的正确答案,但我对最接近社区共识的内容感兴趣.
我发现自己有很多小烦恼 - 我有一个Dictionary<TKey, TValue>包含值可能存在或不存在的值.
所以正常的行为是使用索引器,如下所示:
object result = myDictionary["key"];
Run Code Online (Sandbox Code Playgroud)
但是,如果"key"不在字典中,则抛出a KeyNotFoundException,所以你这样做:
object val;
if (!myDictionary.TryGetValue("key", out val))
{
val = ifNotFound;
}
Run Code Online (Sandbox Code Playgroud)
哪个好,除了我可以连续加载这些 - TryGetValue开始觉得可怕的笨重.
因此选项1是一种扩展方法:
public static TValue TryGet<TKey, TValue>(
this Dictionary<TKey, TValue> input,
TKey key,
TValue ifNotFound = default(TValue))
{
TValue val;
if (input.TryGetValue(key, out val))
{
return val;
}
return ifNotFound;
}
Run Code Online (Sandbox Code Playgroud)
这让我做:
object result = myDictionary.TryGet("key1") ?? ifNotFound;
int i = anotherDictionary.TryGet("key2", -1);
Run Code Online (Sandbox Code Playgroud)
这很简单,但是名称类似于现有实例方法的附加扩展方法可能会增加混淆并降低可维护性.它也与字典的索引器集不一致 - 它将处理丢失的密钥.
所以选项2是一个新的实现,IDictionary<TKey, TValue>带有隐式转换, …
我有一个包含WebForms和MVC页面的大型企业应用程序.它具有我不想更改的现有身份验证和授权设置.
WebForms身份验证在web.config中配置:
<authentication mode="Forms">
<forms blah... blah... blah />
</authentication>
<authorization>
<deny users="?" />
</authorization>
Run Code Online (Sandbox Code Playgroud)
到目前为止相当标准.我有一个REST服务,它是这个大型应用程序的一部分,我想使用HTTP身份验证代替这一项服务.
因此,当用户尝试从REST服务获取JSON数据时,它会返回HTTP 401状态和WWW-Authenticate标头.如果他们以正确形成的HTTP Authorization响应进行响应,则允许他们进入.
问题是,WebForms的覆盖这个处于较低的水平 - 如果返回401(未授权)它将覆盖与302(重定向到登录页面).这在浏览器中很好,但对REST服务没用.
我想关闭web.config中的身份验证设置,覆盖'rest'文件夹:
<location path="rest">
<system.web>
<authentication mode="None" />
<authorization><allow users="?" /></authorization>
</system.web>
</location>
Run Code Online (Sandbox Code Playgroud)
该授权位工作正常,但认证线(<authentication mode="None" />)导致异常:
在应用程序级别之外使用注册为allowDefinition ='MachineToApplication'的部分是错误的.
我在应用程序级别配置它 - 它位于根web.config中 - 并且该错误适用于子目录中的web.configs.
如何覆盖身份验证,以便该站点的所有其余部分都使用WebForms身份验证,而这个目录不使用任何身份验证?
这类似于另一个问题:与ASP.NET MVC JSON请求401响应代码,但我不是在寻找相同的解决方案-我不想只是删除WebForms的认证和全球范围内添加新的自定义代码,还有远涉及很多风险和工作.我想只更改配置中的一个目录.
更新
我想设置一个Web应用程序,并希望所有WebForms页面和MVC视图都使用WebForms身份验证.我希望一个目录使用基本的HTTP身份验证.
请注意,我说的是身份验证,而不是授权.我希望REST调用带有HTTP头中的用户名和密码,我希望WebForm和MVC页面附带来自.Net的身份验证cookie - 在任何一种情况下,都会对我们的数据库进行授权.
我不想重写WebForms身份验证并滚动我自己的cookie - 这似乎是将HTTP授权的REST服务添加到应用程序的唯一方法,这似乎很荒谬.
我无法添加其他应用程序或虚拟目录 - 它必须作为一个应用程序.
我希望能够在ASPX(或Razor)页面中使用内联TypeScript,该页面在页面编译时转换为Javascript.
所以:
<script type="text/typescript" runat="server">
...
</script>
Run Code Online (Sandbox Code Playgroud)
成为...
<script type="text/javascript">
...
</script>
Run Code Online (Sandbox Code Playgroud)
它应该发生在@或<% %>转换块的同一点上.
这应该可以在运行时使用某种页面后处理,但是在编译时不会产生异常 - 我想在脚本中找到与任何C#代码同时出现的错误.
理想情况下,TypeScript intellisense等应该<script>在内联块中工作,这使我认为这应该是VS2012扩展.
有没有办法做到这一点?
c# ×5
.net ×2
asp.net ×2
.net-3.5 ×1
agile ×1
attributes ×1
conflict ×1
dictionary ×1
enums ×1
http ×1
jquery ×1
linq ×1
logout ×1
oracle ×1
prototypejs ×1
reflection ×1
server-side ×1
typescript ×1
vb.net ×1
web-config ×1