gpt4 book ai didi

asp.net-mvc-3 - MVC3 AllowHtml 属性的问题

转载 作者:行者123 更新时间:2023-12-04 02:10:56 24 4
gpt4 key购买 nike

我有一个基于 MVC3(没有测试版或发布候选,RTM/RTW 版本)的 Web 应用程序,它具有接受 XML 文件进行处理的操作。

当然,这对 MVC 来说似乎是邪恶的,因为可能存在攻击,所以它不允许这样做。好吧,我尝试将 AllowHtml 放在模型对象上,如下所示:

   public class XMLModel
{
[AllowHtml]
public string msg { get; set; }
}

或者我在我的操作方法上将 ValidateInput 设置为 false ,例如:
    [ValidateInput(false)]
public ActionResult AddCDR(XMLModel model)
{
}

首先使用“强”类型模型的原因是,我最初尝试将名为“msg”的字符串值作为操作方法参数,但结果总是为空。

现在,当有人在同一台机器上或从联网计算机向此表单发帖时,msg 字段始终为空。

我已经与 WireShark 验证数据实际上在请求中。

现在,一件有趣的事情。 这对于 MVC 3 来说不是必需的.然而,它产生了细微的差别。

如果我将此添加到我的网络配置中:
<httpRuntime requestValidationMode="2.0" />

它适用于来自本地计算机的请求,但不适用于来自其他系统的请求。

我认为 AllowHtml 版本看起来很优雅——如果它有效的话。

我还发现了 RC2 中的一个错误——同样,这应该不会影响我,但我还是尝试在 Application_Start() 中添加以下内容:
ModelMetadataProviders.Current = new DataAnnotationsModelMetadataProvider();

正如预期的那样,它没有真正的区别。

在我的开发计算机(Win7x64、VS2010)上一切正常,但在目标系统(Win2008R2x64、IIS7.5)上,上述问题让我很难受。

非常重要的注意事项 :如果我发布到没有尖括号的操作,我会按预期获得表单数据。但是,一旦出现尖括号,要么根本没有调用我的操作,要么找不到表单数据,无论是在操作方法参数中还是在例如 Request.Params["msg"] 中应该。

任何允许 XML 通过的想法?

更新

我试图解决这个问题,同时等待任何人在这里提出答案。我还没有解决它,但我检查了一些额外的细节;
  • 首先,我验证了我的开发计算机和 Web 服务器上安装的 ASP.NET MVC 3 版本是相同的; v3.0.20105.0(根据添加/删除程序)。
  • Web 应用程序实际上是使用 MVC3 测试版创建的,然后在它们出来时转换为 RC1 和 RC2,最后转换为 RTM 版本。这意味着由于 ViewBag 的变化,我不得不修改一些代码。然而,由于我不知道到底还有什么变化,我用 RTM 版本创建了一个全新的 MVC3 应用程序,创建了一个同名的 Controller ,使用相同的操作方法,取一个类似于当前使用的模型对象,重命名旧的 Web 应用程序目录并将这个新目录放置到位。发生了完全相同的事情 - 即当请求来自本地机器时,带有 AllowHtml 属性的参数随所有内容一起出现,但如果它来自远程机器,则 HTML(实际上是 XML)被剥离。
  • 没有异常(exception)。我已经安装了 Elmah 并验证了这一点 - 没有异常发生,我的 action 方法显然只是调用了任何看起来像从参数中剥离到方法的 XML 的东西。

  • 不用说,这让我发疯。昨天我有一些建议来查看 MVC3 的源代码,但不幸的是,这并没有真正帮助我,因为我看不到那里有任何明显的错误,而且我无法调试有问题的服务器上的代码。

    仍然非常需要任何见解,谢谢! :)

    最佳答案

    我无法重现这一点。

    模型:

    using System.Web.Mvc;

    namespace MvcApplication3.Models {
    public class XmlModel {
    [AllowHtml]
    public string msg { get; set; }
    }
    }

    Controller :
    using System.Web.Mvc;
    using MvcApplication3.Models;

    namespace MvcApplication3.Controllers {
    public class HomeController : Controller {
    public ActionResult Index() {
    return View();
    }

    [HttpPost]
    public ActionResult Index(XmlModel model) {
    return View();
    }
    }
    }

    看法:
    @model MvcApplication3.Models.XmlModel

    @using (Html.BeginForm()) {
    <div class="editor-label">
    @Html.LabelFor(model => model.msg)
    </div>
    <div class="editor-field">
    @Html.EditorFor(model => model.msg)
    @Html.ValidationMessageFor(model => model.msg)
    </div>
    }

    这些已添加到默认的空 MVC 3 项目中。一切都很好。当我删除 [AllowHtml] 时,它会生成相应的错误消息。

    关于asp.net-mvc-3 - MVC3 AllowHtml 属性的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4821274/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com