我有一个基于MVC3的Web应用程序(没有beta或候选版本,RTM/RTW版本),它有一个接受XML文件进行处理的动作.
当然,由于可能的攻击,这对MVC来说似乎是邪恶的,所以它不允许它.好吧,我尝试将AllowHtml放在模型对象上:
public class XMLModel
{
[AllowHtml]
public string msg { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
或者我在我的操作方法上将ValidateInput设置为false,例如:
[ValidateInput(false)]
public ActionResult AddCDR(XMLModel model)
{
}
Run Code Online (Sandbox Code Playgroud)
首先使用"强"类型模型的原因是我最初尝试将名为"msg"的字符串值作为操作方法参数,但总是返回空.
现在,当有人在同一台计算机或联网计算机上发布此表单时,msg字段始终为空白.
我已经使用WireShark验证了数据实际上在请求中.
现在,一件有趣的事情.对于MVC 3,这不是必需的.但它略有不同.
如果我将其添加到我的网络配置:
<httpRuntime requestValidationMode="2.0" />
Run Code Online (Sandbox Code Playgroud)
它适用于来自本地计算机的请求,但它不适用于其他系统.
我认为AllowHtml版本似乎很优雅 - 只要它有效.
我也发现了RC2中的一个错误 - 再次,这不应该影响我,但我还是尝试在Application_Start()中添加以下内容:
ModelMetadataProviders.Current = new DataAnnotationsModelMetadataProvider();
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,它没有什么不同.
一切都在我的开发计算机(Win7x64,VS2010)上按预期工作,但在目标系统(Win2008R2x64,IIS7.5)上,上述问题让我很难过.
非常重要的一点要注意:如果我发布没有尖括号的动作,我会得到预期的表单数据.但是,只要尖括号出现,我的动作就完全没有被调用,或者它没有找到表单数据,也没有在动作方法参数中或在例如Request.Params ["msg"]中找到它应该.
任何允许XML通过的想法?
UPDATE
在等待有人在这里提出答案时,我试图绕过这个.我还没有解决它,但我已经检查了一些额外的细节;
不用说,这让我发疯了.昨天我有一些建议来查看MVC3的源代码,但不幸的是,这并没有真正帮助我,因为我看不到任何明显的错误,我无法在有问题的服务器上调试代码.
任何见解仍然非常需要,谢谢!:)
我无法重现这一点.
模型:
using System.Web.Mvc;
namespace MvcApplication3.Models {
public class XmlModel {
[AllowHtml]
public string msg { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
控制器:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
视图:
@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>
}
Run Code Online (Sandbox Code Playgroud)
这些被添加到默认的空MVC 3项目中.一切都很好.当我删除[AllowHtml]时,它会生成相应的错误消息.
我自己回答这个问题是因为这是一个模糊的情况,MVC3 不是问题所在。
将数据发布到我的应用程序的系统使用的是格式错误的数据。除此之外,我被告知他们还 POST 到一个工作得很好的旧 MVC2 应用程序 - 这是错误的,事实证明他们在这种情况下进行了 GET,并且 GET 他们碰巧做得正确。
如果说有什么不同的话,相当彻底的测试已经证实了AllowHtml 属性实际上工作得很好。不过,永远不要相信你的输入。:)
| 归档时间: |
|
| 查看次数: |
11829 次 |
| 最近记录: |