我的Umbraco有问题( v4.7.2 )。
目前,由于ASP.NET请求验证,我无法从Umbraco界面发布内容。当它关闭时,一切都像魅力一样。
我正在为此寻找某种解决方案,因为我担心会禁用我的应用程序的请求验证。因此,我决定在需要的时候以编程方式关闭验证。
我的第一个解决方案是订阅 umbraco.cms.businesslogic.web.Document 事件。例如,我可以在 Document.BeforePublish 事件上禁用验证,然后在 Document.AfterPublish 事件上启用验证。 例如:
public UmbracoPublishHandler()
{
Document.BeforePublish += Document_BeforePublish;
Document.AfterPublish += Document_AfterPublish;
}
private void Document_BeforePublish(Document sender, PublishEventArgs args)
{
//Turn off validation here
}
private void Document_AfterPublish(Document sender, PublishEventArgs args)
{
//Turn on validation here
}
但是这不起作用,因为请求验证在 Document.BeforePublish 事件发生之前提供了验证。
第二个解决方案是实现自定义 UsersMembershipProvider 并在用户成功通过身份验证后关闭验证。但问题是 - 当用户例如从Umbraco注册时,我无法捕获任何适当的事件以启用验证。
示例:
public class CustomUsersMembershipProvider : umbraco.providers.UsersMembershipProvider
{
public override bool ValidateUser(string username, string password)
{
var success = base.ValidateUser(username, password);
if (success)
{
//Turn off validation here
}
return success;
}
}
你能告诉我一些事吗?使用Umbraco进行请求验证的最佳做法是什么?
答案 0 :(得分:0)
您可能需要设置正确的.NET请求验证版本。 Umbraco适用于2.0版本:
<httpRuntime requestValidationMode="2.0">
答案 1 :(得分:0)
我想通过将指令 EnableEventValidation =“false”添加到 Umbraco / editContent.aspx 页面来解决我的问题。默认情况下,它还有 ValidateRequest =“false”。
所以我担心的事情 - 在应用程序级别禁用请求验证似乎不是尝试。
拥有 requestValidationMode = 2.0 只会限制.aspx页面的验证,但根本不会禁用它。它还可以使用页面指令。
答案 2 :(得分:0)
我们可以在传递给codebehind之前使用jQuery对html字符串数据进行编码(asp.net C#) 例如 -
jQuery('<div />').text('Some text with <div>html</div>').html()
,输出看起来像 -
"Some text with <div>html</div>"
然后解码数据以显示HTML(不显示HTML标签) -
jQuery('<div />').html('Some text with <div>html</div>').text()
输出看起来像 -
"Some text with <div>html</div>"