Asp.net mvc 3 MVC3 AllowTML属性存在问题
我有一个基于MVC3(无测试版或候选发行版,RTM/RTW版本)的web应用程序,它有一个接受XML文件进行处理的操作 当然,这对MVC来说似乎是邪恶的,因为可能会受到攻击,所以它不允许这样做。我尝试在模型对象上放置AllowHtml,如下所示:Asp.net mvc 3 MVC3 AllowTML属性存在问题,asp.net-mvc-3,Asp.net Mvc 3,我有一个基于MVC3(无测试版或候选发行版,RTM/RTW版本)的web应用程序,它有一个接受XML文件进行处理的操作 当然,这对MVC来说似乎是邪恶的,因为可能会受到攻击,所以它不允许这样做。我尝试在模型对象上放置AllowHtml,如下所示: public class XMLModel { [AllowHtml] public string msg { get; set; } } 或者在我的操作方法中将ValidateInput设置为f
public class XMLModel
{
[AllowHtml]
public string msg { get; set; }
}
或者在我的操作方法中将ValidateInput设置为false,例如:
[ValidateInput(false)]
public ActionResult AddCDR(XMLModel model)
{
}
首先使用“强”类型模型的原因是,我最初尝试使用名为“msg”的字符串值作为操作方法参数,但结果总是为空
现在,当有人在同一台机器上或从联网的计算机上发布此表单时,msg字段始终为空
我已经与WireShark核实数据实际上在请求中
现在,有一件有趣的事MVC 3不需要这样做。但这有点不同
如果我将其添加到我的web配置中:
<httpRuntime requestValidationMode="2.0" />
正如所料,这并没有真正的区别
在我的开发计算机(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应用程序,用相同的操作方法创建了一个同名控制器,使用了一个与当前使用的类似的模型对象,重命名了旧的web app目录,并将这个新目录放在适当的位置。同样的情况也会发生——即,当从本地机器发出请求时,带有allowtml属性的参数包含所有内容,但如果它来自远程机器,则HTML(XML)实际上会被剥离。
- 也不例外。我已经安装了Elmah并验证了这一点——没有发生异常,我的action方法显然只是调用了从参数中剥离出来的类似XML的内容
任何仍然非常需要的见解,谢谢!:) 我无法复制这个 型号:
using System.Web.Mvc;
namespace MvcApplication3.Models {
public class XmlModel {
[AllowHtml]
public string msg { get; set; }
}
}
控制器:
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 mvcapapplication3.Models.XmlModel
@使用(Html.BeginForm()){
@LabelFor(model=>model.msg)
@EditorFor(model=>model.msg)
@Html.ValidationMessageFor(model=>model.msg)
}
它们被添加到默认的空MVC3项目中。一切都很好。当我删除[AllowHtml]时,它会生成相应的错误消息。我自己回答这个问题,因为这是一个模糊的情况,MVC3不是问题所在 将数据发布到我的应用程序的系统使用的是格式错误的数据。除此之外,有人告诉我,他们也在发布一个运行良好的旧MVC2应用程序——这是错误的,事实证明他们在这种情况下得到了正确的结果
如果有什么区别的话,相当彻底的测试已经确认AllowHtml属性实际上工作得非常好。千万不要相信你的意见,tho.) 谢谢,布拉德,非常感谢!我自己也在这方面取得了一些进展,希望在今天的某个时候确认一个解决方案。
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>
}