如何在HtmlEditorExtender中设置图像上传位置并启用Sanitization在引用3个dll并编辑web.config后停止调试?

时间:2012-07-07 16:22:25

标签: asp.net ajax

今天我将HtmlEditorExtender添加到我的asp.net web应用程序一切正常但我面临两个主要问题: 1.如何设置HtmlEditorExtender上传图像的图像上传位置。 2.我无法为此HtmlEditorExtender启用AntiXSS Sanitizer Provider我按照此页面上的方法操作 asp.net ajax page

但是当我把这段代码放在Web.config

中时
<sanitizer defaultProvider="AntiXssSanitizerProvider">
    <providers>
        <add name="AntiXssSanitizerProvider" 
        type="AjaxControlToolkit.Sanitizer.
          AntiXssSanitizerProvider"></add>
    </providers>
</sanitizer>

这会强调<sanitizer>标记并在调试时要求我提供一个Sanitizer.cs文件并告诉它 无法加载类型'AjaxControlToolkit.Sanitizer.AntiXssSanitizerProvider'。 (C:\ Users \ saurav \ Documents \ Visual Studio 2010 \ Projects \ sauravtopnet \ sauravtopnet \ web.config第56行) 找到'c:\ Users \ Stephen \ Documents \ Repos \ Superexpert \ AjaxControlToolkit \ Server \ AjaxControlToolkit \ HtmlEditorExtender \ HtmlEditorExtender.cs'的源代码。校验和:MD5 {79 93 7c d3 c7 ff b7 88 f af 76 3c 18 24 66 19} 文件'c:\ Users \ Stephen \ Documents \ Repos \ Superexpert \ AjaxControlToolkit \ Server \ AjaxControlToolkit \ HtmlEditorExtender \ HtmlEditorExtender.cs'不存在。 查看'c:\ Users \ Stephen \ Documents \ Repos \ Superexpert \ AjaxControlToolkit \ Server \ AjaxControlToolkit \ HtmlEditorExtender \ HtmlEditorExtender.cs'的脚本文档... 查看'c:\ Users \ Stephen \ Documents \ Repos \ Superexpert \ AjaxControlToolkit \ Server \ AjaxControlToolkit \ HtmlEditorExtender \ HtmlEditorExtender.cs'的项目。 在项目中找不到该文件。 查看目录'D:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ crt \ src \'... 查看目录'D:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ atlmfc \ src \ mfc \'... 查看目录'D:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ atlmfc \ src \ atl \'... 查看目录'D:\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ atlmfc \ include \'... 活动解决方案的调试源文件设置表明调试器不会要求用户找到该文件:c:\ Users \ Stephen \ Documents \ Repos \ Superexpert \ AjaxControlToolkit \ Server \ AjaxControlToolkit \ HtmlEditorExtender \ HtmlEditorExtender.cs。 调试器无法找到源文件'c:\ Users \ Stephen \ Documents \ Repos \ Superexpert \ AjaxControlToolkit \ Server \ AjaxControlToolkit \ HtmlEditorExtender \ HtmlEditorExtender.cs'。

我应该告诉你 C:\用户\斯蒂芬\文档\回购\ Superexpert \ AjaxControlToolkit \服务器\ AjaxControlToolkit \ HtmlEditorExtender \ HtmlEditorExtender.cs Stephen不是我系统上的任何用户,而是调试器正在寻找这条路径的原因。

我将这两行添加到我的代码页面

之后
using AjaxControlToolkit.Sanitizer;
using Microsoft.Security.Application;

这是我的ajax代码

<ajaxToolkit:HtmlEditorExtender
    ID="hee" EnableSanitization="true"
    TargetControlID="txtComments"
    Runat="server" >
    <Toolbar> 
            <ajaxToolkit:Undo />
            <ajaxToolkit:Redo />
            <ajaxToolkit:Bold />
            <ajaxToolkit:Italic />
            <ajaxToolkit:Underline />
            <ajaxToolkit:StrikeThrough />
            <ajaxToolkit:Subscript />
            <ajaxToolkit:Superscript />
            <ajaxToolkit:JustifyLeft />
            <ajaxToolkit:JustifyCenter />
            <ajaxToolkit:JustifyRight />
            <ajaxToolkit:JustifyFull />
            <ajaxToolkit:InsertOrderedList />
            <ajaxToolkit:InsertUnorderedList />
            <ajaxToolkit:CreateLink />
            <ajaxToolkit:UnLink />
            <ajaxToolkit:RemoveFormat />
            <ajaxToolkit:SelectAll />
            <ajaxToolkit:UnSelect />
            <ajaxToolkit:Delete />
            <ajaxToolkit:Cut />
            <ajaxToolkit:Copy />
            <ajaxToolkit:Paste />
            <ajaxToolkit:BackgroundColorSelector />
            <ajaxToolkit:ForeColorSelector />
            <ajaxToolkit:FontNameSelector />
            <ajaxToolkit:FontSizeSelector />
            <ajaxToolkit:Indent />
            <ajaxToolkit:Outdent />
            <ajaxToolkit:InsertHorizontalRule />
            <ajaxToolkit:HorizontalSeparator />
            <ajaxToolkit:InsertImage />
        </Toolbar>
    </ajaxToolkit:HtmlEditorExtender>

这是我的参考

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>

我已经下载并添加了所有三个.dll。

6 个答案:

答案 0 :(得分:4)

你正确的第一部分:

<configsections>
    <sectionGroup name="system.web">
    <section name="sanitizer" requirePermission="false" type="AjaxControlToolkit.Sanitizer.ProviderSanitizerSection,  AjaxControlToolkit" />
    </sectionGroup>
</configsections>

system.web

<system.web>
    <sanitizer defaultProvider="AntiXssSanitizerProvider">
        <providers>
          <add name="AntiXssSanitizerProvider" type="AjaxControlToolkit.Sanitizer.HtmlAgilityPackSanitizerProvider" />
        </providers>
      </sanitizer>
</system.web>

html:

 <asp:Textbox ID="replyBody" Height="400px" Width="892px" runat="server" TextMode ="MultiLine"  />
 <ajaxToolkit:HtmlEditorExtender ID="replyBody_HtmlEditorExtender" runat="server" Enabled="True" OnImageUploadComplete="saveFile"  ClientIDMode="AutoID" EnableSanitization="true"  TargetControlID="replyBody">
 <Toolbar>
     <ajaxToolkit:Bold />
     <ajaxToolkit:Italic />
     <ajaxToolkit:Underline />
     <ajaxToolkit:StrikeThrough />
     <ajaxToolkit:Subscript />
     <ajaxToolkit:Superscript />
     <ajaxToolkit:JustifyLeft />
     <ajaxToolkit:JustifyCenter />
     <ajaxToolkit:JustifyRight />
     <ajaxToolkit:JustifyFull />
     <ajaxToolkit:InsertOrderedList />
     <ajaxToolkit:InsertUnorderedList />
     <ajaxToolkit:CreateLink />
     <ajaxToolkit:UnLink />
     <ajaxToolkit:RemoveFormat />
     <ajaxToolkit:Cut />
     <ajaxToolkit:Copy />
     <ajaxToolkit:Paste />
     <ajaxToolkit:BackgroundColorSelector />
     <ajaxToolkit:ForeColorSelector />
     <ajaxToolkit:FontNameSelector />
     <ajaxToolkit:FontSizeSelector />
     <ajaxToolkit:Indent />
     <ajaxToolkit:Outdent />
     <ajaxToolkit:InsertHorizontalRule />
     <ajaxToolkit:HorizontalSeparator />
     <ajaxToolkit:InsertImage />
 </Toolbar>
 </ajaxToolkit:HtmlEditorExtender>

至于设置图像位置,它在AjaxControlToolkit.AjaxFileUploadEventArgs

中传递

属性e.FileName用于检索文件名,e.postedUrl用于告知控件上传位置,可以按照以下说明完成:

protected void saveFile(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
{
    string fullPath = "/Images/Upload_test/"+ e.FileName;

    // Save your File
    replyBody_HtmlEditorExtender.AjaxFileUpload.SaveAs(Server.MapPath(fullPath));

    // Tells the HtmlEditorExtender where the file is otherwise it will render as: <img src="" />
    e.PostedUrl = fullPath;
}

对我来说效果很好。

答案 1 :(得分:0)

我遇到了完全相同的问题,我几天都搞乱了。

至少我现在第一次成功。 我按照这个指南: http://www.asp.net/web-forms/tutorials/ajax-control-toolkit/getting-started/using-ajax-control-toolkit-controls-and-control-extenders-cs

我正在写下对我来说最重要的步骤:

  • 创建Web窗体项目
  • 使用NuGet进行安装或手动无关紧要(我通过NuGet安装它并将工具箱条目链接到我项目的packages-folder中的dll)
  • 我没有在我的项目的web.config中修改任何东西(虽然我需要看一下消毒的东西作为接下来的步骤之一)。
  • 我使用ASP脚本管理器,而不是ajax控件工具包

所以这是我的片段,它实际上适合我(至少现在,看到任何不依赖于斯蒂芬斯的电脑对我来说是成功的^^)

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="webforms._Default" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit.HTMLEditor" TagPrefix="cc1" %>
<%@ Register TagPrefix="asp" Namespace="AjaxControlToolkit" Assembly="AjaxControlToolkit"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>hey ho</title>
</head>
<body>
  <form id="form1" runat="server">
    <div>
      hello world!
    </div>
    <div>
      second div
      <br/>
      <asp:ScriptManager ID="ScriptManager1" runat="server">
      </asp:ScriptManager>
      <cc1:Editor ID="Editor1" runat="server" />
    </div>
  </form>
</body>
</html>

答案 2 :(得分:0)

配置Ajax HtmlEditorExtender非常困难,但link : http://stephenwalther.com/archive/2012/05/01/ajax-control-toolkit-may-2012-release.aspx将指导您如何设置图片上传路径和其他相关设置

下一个问题是如何设置清洁剂以保护您免受XSS攻击。实际上推荐的消毒剂提供商无法正常工作。看看我为此做了什么

  1. 从Microsoft CodePlex或通过NuGet
  2. 下载AntiXSS.4.2.1
  3. 现在提取zip文件你会得到两个.dll AntiXSSLibrary.dll和HtmlSanitizationLibrary.dll添加你的项目引用这两个.dll
  4. 现在将using Microsoft.Security.Application;添加到您的代码页面后面。
  5. 现在使用以下代码点击您想要获取的任何按钮的事件,并在htmleditor中显示您的输入。
  6. 这里txteditor是与你的htmleditor链接的asp:textbox的id。任何文本框的输入总是由.net框架编码以确保安全性,因此首先解码输入html文本然后用我自己的单词替换<br>标签然后我将输入转发给清理程序,它将删除任何XSS攻击代码但不幸的是它也会删除像<br>, <img src=""/> or <a href=""></a>这样的html代码就是为什么我在这里替换了<br>标签,现在再次解码清理后的html并用相应的标签替换你的单词。现在你可以像我在div1中显示的那样在任何地方显示你的HTML。我想这些信息。可以帮助您进一步的步骤。

    String x = HttpUtility.HtmlDecode(txteditor.Text).Replace("<br>", "rrrbbbbrbrbrbrbr"); 
    String y = Sanitizer.GetSafeHtmlFragment(x); 
    div1.InnerHtml = HttpUtility.HtmlDecode(y).Replace("rrrbbbbrbrbrbrbr", "<br>"); 
    txteditor.Text = HttpUtility.HtmlDecode(y).Replace("rrrbbbbrbrbrbrbr", "<br>");
    

    将默认清洁剂设为false,如下所示:

        <ajaxToolkit:HtmlEditorExtender ID="ajaxeditor" OnImageUploadComplete="ajaxFileUpload_OnUploadComplete" TargetControlID="txteditor" DisplaySourceTab="false" EnableSanitization="false" Runat="server" >
    

    无需在web.config中配置任何内容,也无需添加www.asp.net上推荐的那些3.dll

答案 3 :(得分:0)

将此设置为false对我有帮助,EnableSanitization="false"

答案 4 :(得分:0)

如上所述,你需要脚本管理器。但是,您将需要ajax工具包脚本管理器。我发现的另一件事是你需要在web.config中放置正确的设置才能正确上传文件。这两个设置都需要“安全性”和“处理程序”。

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <add name="AjaxFileUploadHandler" verb="*" path="AjaxFileUploadHandler.axd"type="AjaxControlToolkit.AjaxFileUploadHandler, AjaxControlToolkit" />
    </handlers>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="4294967295" />
      </requestFiltering>
    </security>
  </system.webServer>

答案 5 :(得分:-1)

以htmlediterextender代码上传图片

    protected void htmleditorextender_ImageUploadComplete(object sender, AjaxFileUploadEventArgs e)
       {
           string fullpath = Server.MapPath("~/images/") + e.FileName;

           editor_extender.AjaxFileUpload.SaveAs(fullpath);

           e.PostedUrl = Page.ResolveUrl("~/images/" + e.FileName);
       }