Umbraco& ASP.NET请求验证

时间:2014-01-03 10:57:20

标签: c# asp.net .net umbraco

我的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进行请求验证的最佳做法是什么?

3 个答案:

答案 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 &lt;div&gt;html&lt;/div&gt;"

然后解码数据以显示HTML(不显示HTML标签) -

jQuery('<div />').html('Some text with &lt;div&gt;html&lt;/div&gt;').text()

输出看起来像 -

"Some text with <div>html</div>"