Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 MVC3 AllowTML属性存在问题_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc 3 MVC3 AllowTML属性存在问题

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

我有一个基于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不需要这样做。但这有点不同

如果我将其添加到我的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的内容
不用说,这快把我逼疯了。昨天我得到了一些关于查看MVC3源代码的建议,但不幸的是,这并没有真正帮助我,因为我看不出有任何明显的错误,并且我无法在有问题的服务器上调试代码


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

我无法复制这个

型号:

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>
}